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.