Comment le planificateur du système d'exploitation gère-t-il l'exécution d'une fonction qui effectue une requête réseau?
sobes.tech IA
Réponse de l'IA
En Go, le planificateur (scheduler) gère les goroutines, qui sont des threads légers. Lorsqu'une fonction effectue une requête réseau, elle se bloque généralement sur une opération d'entrée/sortie.
Le planificateur de Go utilise une entrée/sortie non bloquante et des appels système asynchrones. Lorsqu'une goroutine attend une réponse du réseau, le planificateur la met en attente et passe à l'exécution d'autres goroutines.
Cela permet d'utiliser efficacement les ressources système et de ne pas bloquer le thread du système d'exploitation. Après la fin de la requête réseau, le planificateur reprend l'exécution de la goroutine.
Exemple :
func fetch(url string) {
resp, err := http.Get(url) // requête réseau
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
// traitement de la réponse
}
func main() {
go fetch("http://example.com")
// autres goroutines s'exécutent en parallèle
}
Ainsi, le planificateur de Go gère efficacement les goroutines, en les basculant lors d'opérations bloquantes telles que les requêtes réseau.