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.