¿Cómo se puede organizar y gestionar la secuencia de ejecución de los hilos?
sobes.tech AI
Respuesta de la IA
En Go, para organizar y gestionar la secuencia de ejecución de goroutines, se utilizan varios mecanismos principales:
-
Canales (channels) — permiten sincronizar las goroutines, transmitiendo datos entre ellas. Una goroutine que lee desde un canal esperará hasta que otra goroutine envíe datos, lo que garantiza el orden.
-
sync.WaitGroup — se usa para esperar a que un grupo de goroutines termine. Permite esperar hasta que todas las goroutines en ejecución finalicen.
-
Mutex y otros primitivas del paquete sync — para proteger recursos compartidos y prevenir condiciones de carrera.
Ejemplo de uso de canales para ejecución secuencial:
package main
import (
"fmt"
)
func worker(id int, done chan bool) {
fmt.Printf("Trabajador %d iniciado\n", id)
// simulación de trabajo
done <- true // señal de finalización
}
func main() {
done := make(chan bool)
go worker(1, done)
<-done // esperamos a que termine el trabajador 1
go worker(2, done)
<-done // esperamos a que termine el trabajador 2
fmt.Println("Todos los trabajadores han terminado")
}
De esta forma, usando canales y sincronización, se puede gestionar el orden de ejecución de las goroutines.