¿De qué manera se realiza el control y la coordinación del trabajo de las goroutines en Go?
sobes.tech AI
Respuesta de la IA
En Go, el control y la coordinación de las goroutines se realiza de varias maneras:
-
Canales (channels) — mecanismo principal para intercambiar datos y sincronizar entre goroutines. Los canales permiten transmitir valores de forma segura y bloquean al emisor o receptor hasta que estén listos.
-
sync.WaitGroup — se usa para esperar a que un grupo de goroutines termine. Permite que la goroutine principal espere hasta que todas las goroutines lanzadas finalicen.
-
Context (context.Context) — se emplea para gestionar el tiempo de vida de las goroutines, transmitir señales de cancelación y establecer límites de tiempo.
-
Mutexes y otros primitivas del paquete sync — para proteger recursos compartidos y prevenir condiciones de carrera.
Ejemplo con WaitGroup y canal:
var wg sync.WaitGroup
ch := make(chan int)
wg.Add(1)
go func() {
defer wg.Done()
ch <- 42 // enviando valor
}()
go func() {
val := <-ch // recibiendo valor
fmt.Println(val)
}()
wg.Wait() // esperando a que termine
De esta forma, la combinación de canales y primitivas de sincronización permite gestionar eficazmente la ejecución paralela de las goroutines.