HeadlinesBriefing favicon HeadlinesBriefing.com

Resumen del mini-libro Go Concurrency Distilled

Hacker News •
×

Este mini-libro proporciona una breve descripción de muchos temas de concurrencia en Go. Cada tema incluye ejemplos interactivos: siéntete libre de experimentar con ellos cambiando el código y haciendo clic en Ejecutar. También hay una versión PDF con ejemplos estáticos.

Esto es una rápida revisión de la concurrencia en Go, no una guía para principiantes. Si quieres aprender concurrencia desde cero con ejercicios prácticos, consulta el otro libro: Gist of Go: Concurrency. El libro es libre de IA.

La base de la concurrencia en Go son las goroutines: funciones iniciadas con la palabra clave go. El runtime de Go coordina estas goroutines y las distribuye entre los hilos del sistema operativo que se ejecutan en los núcleos de la CPU. En comparación con los hilos del SO, las goroutines son ligeras, por lo que puedes crear cientos o miles de ellas.

Un wait group tiene un counter dentro. Llamar a Add(n) lo incrementa en n, mientras que Done() lo decrementa en uno. Wait() bloquea la goroutine que llama hasta que el counter llega a cero.

De esta manera, main espera a que ambos workers terminen antes de salir. Las goroutines pueden pasarse valores entre sí a través de canales. Un canal es como una ventana donde una goroutine puede tirar algo y otra puede agarrarlo.

Enviar un valor a través de un canal es una operación sincrónica. Cuando la goroutine que envía escribe un valor en el canal, se bloquea y espera a que alguien reciba ese valor. Solo entonces continúa.

El patrón común de devolver un canal desde una función y llenarlo dentro de una goroutine interna permite al receptor recibir valores mientras la función dueña retiene el control. Cerrar un canal le signals a los lectores que se han enviado todos los datos. El le.