Sobes.tech
Junior — Middle

O que acontece com uma goroutine quando ela fica bloqueada na execução de algum processo ou operação?

sobes.tech IA

Resposta da IA

Quando uma goroutine em Go fica bloqueada numa operação (por exemplo, leitura de um canal, espera de sincronização, entrada/saída), ela é suspensa, e o agendador do Go liberta a thread do sistema para executar outras goroutines. Isto permite usar eficientemente os recursos do sistema e escalar o paralelismo.

Ou seja, uma operação bloqueante não bloqueia toda a thread do sistema operativo, apenas a goroutine específica. O agendador muda para outras goroutines que estão prontas para executar.

Exemplo:

ch := make(chan int)
func() {
    val := <-ch // a goroutine fica bloqueada até receber um valor
    fmt.Println(val)
}()
ch <- 42 // desbloqueia a goroutine

Neste exemplo, a goroutine fica bloqueada na leitura do canal, mas o agendador permite que outras goroutines trabalhem enquanto ela espera.