Junior — Middle
Cosa succede a una goroutine quando si blocca durante l'esecuzione di un processo o operazione?
sobes.tech AI
Risposta dell'AI
Quando una goroutine in Go si blocca in un'operazione (ad esempio, lettura da un canale, attesa di sincronizzazione, input/output), essa viene sospesa, e il pianificatore di Go libera il thread di sistema per eseguire altre goroutines. Questo permette di utilizzare efficacemente le risorse di sistema e scalare il parallelismo.
Cioè, un'operazione bloccante non blocca l'intero thread del sistema operativo, ma solo la goroutine specifica. Il pianificatore passa ad altre goroutines pronte all'esecuzione.
Esempio:
ch := make(chan int)
func() {
val := <-ch // la goroutine si blocca finché non riceve un valore
fmt.Println(val)
}()
ch <- 42 // sblocca la goroutine
In questo esempio, la goroutine si blocca in lettura dal canale, ma il pianificatore permette ad altre goroutines di lavorare mentre aspetta.