Sobes.tech
Junior — Middle

Explica qué son las llamadas bloqueantes en el contexto del trabajo con goroutines y cómo afectan la ejecución del programa

sobes.tech AI

Respuesta de la IA

Las llamadas bloqueantes son operaciones que, al ejecutarse, detienen (bloquean) la goroutine actual hasta que la operación se complete. En el contexto de las goroutines en Go, si una goroutine realiza una llamada bloqueante, no continuará ejecutándose hasta que la llamada finalice.

Esto afecta al programa de manera que si la llamada bloqueante se realiza en la goroutine principal, esta esperará, lo que puede causar retrasos o bloqueos. Sin embargo, gracias a que las goroutines son ligeras y se pueden lanzar muchas, las llamadas bloqueantes en una goroutine no bloquean la ejecución de otras goroutines.

Un ejemplo de llamada bloqueante es leer desde un canal sin datos disponibles:

ch := make(chan int)

func main() {
    go func() {
        ch <- 42 // envío de valor
    }()
    val := <-ch // llamada bloqueante, espera a recibir el valor
    fmt.Println(val)
}

Aquí, la operación de lectura del canal bloquea la goroutine main hasta que llega un valor.