Sobes.tech
Junior — Middle

Explique o que são chamadas bloqueantes no contexto do trabalho com goroutines e como elas afetam a execução do programa

sobes.tech IA

Resposta da IA

Chamadas bloqueantes são operações que, ao serem executadas, param (bloqueiam) a goroutine atual até que a operação seja concluída. No contexto das goroutines em Go, se uma goroutine realiza uma chamada bloqueante, ela não continuará a execução até que a chamada termine.

Isso afeta o programa de modo que, se a chamada bloqueante for feita na goroutine principal, ela aguardará, o que pode causar atrasos ou bloqueios. No entanto, graças à leveza das goroutines e ao fato de poderem ser lançadas muitas, chamadas bloqueantes em uma goroutine não bloqueiam a execução de outras goroutines.

Um exemplo de chamada bloqueante é ler de um canal sem dados disponíveis:

ch := make(chan int)

func main() {
    go func() {
        ch <- 42 // envio de valor
    }()
    val := <-ch // chamada bloqueante, espera receber o valor
    fmt.Println(val)
}

Aqui, a operação de leitura do canal bloqueia a goroutine main até que um valor chegue.