Junior — Middle
Que se passe-t-il avec une goroutine lorsqu'elle se bloque lors de l'exécution d'un processus ou d'une opération?
sobes.tech IA
Réponse de l'IA
Lorsqu'une goroutine en Go se bloque lors d'une opération (par exemple, lecture d'un canal, attente de synchronisation, entrée/sortie), elle est suspendue, et le planificateur Go libère le thread système pour exécuter d'autres goroutines. Cela permet d'utiliser efficacement les ressources système et de faire évoluer le parallélisme.
Autrement dit, une opération bloquante ne bloque pas tout le thread du système d'exploitation, mais seulement la goroutine spécifique. Le planificateur passe à d'autres goroutines prêtes à s'exécuter.
Exemple :
ch := make(chan int)
func() {
val := <-ch // la goroutine se bloque jusqu'à recevoir une valeur
fmt.Println(val)
}()
ch <- 42 // débloque la goroutine
Dans cet exemple, la goroutine se bloque en lisant depuis le canal, mais le planificateur permet à d'autres goroutines de fonctionner pendant qu'elle attend.