Sobes.tech
Junior — Middle

¿Qué sucede con una goroutine cuando se bloquea en la ejecución de algún proceso u operación?

sobes.tech AI

Respuesta de la IA

Cuando una goroutine en Go se bloquea en una operación (por ejemplo, lectura de un canal, espera de sincronización, entrada/salida), se suspende, y el planificador de Go libera el hilo del sistema para ejecutar otras goroutines. Esto permite utilizar eficientemente los recursos del sistema y escalar el paralelismo.

Es decir, una operación bloqueante no bloquea toda la hebra del sistema operativo, sino solo la goroutine específica. El planificador cambia a otras goroutines que están listas para ejecutarse.

Ejemplo:

ch := make(chan int)
func() {
    val := <-ch // la goroutine se bloquea hasta recibir un valor
    fmt.Println(val)
}()
ch <- 42 // desbloquea la goroutine

En este ejemplo, la goroutine se bloquea en la lectura del canal, pero el planificador permite que otras goroutines trabajen mientras espera.