Sobes.tech
Junior — Middle

Dans quels cas les tâches dans les goroutines sont-elles placées dans la file d'attente commune du planificateur d'exécution?

sobes.tech IA

Réponse de l'IA

En Go, les tâches (goroutines) sont placées dans la file d'attente du planificateur d'exécution (file d'attente d'exécution) dans les cas suivants :

  • Lorsqu'une goroutine est créée avec go et est prête à s'exécuter, elle est mise dans la file d'attente du planificateur.
  • Si la goroutine se bloque (par exemple, lors d'opérations d'entrée/sortie, de canaux ou de synchronisation) et est ensuite déverrouillée, elle revient dans la file.
  • Lors de la fin de la goroutine en cours, le planificateur en choisit une suivante dans la file.

Le planificateur de Go utilise un modèle M:N, où M sont les threads système et N sont les goroutines. Il y a beaucoup de goroutines, qui sont réparties sur les threads via des files d'attente. La file d'attente du planificateur est une structure où sont stockées les goroutines prêtes à être exécutées.

Exemple :

func main() {
    go func() {
        fmt.Println("Goroutine lancée")
    }()
    time.Sleep(time.Second) // Attendre pour que la goroutine ait le temps de s'exécuter
}

Ici, la goroutine, après sa création, est placée dans la file d'attente du planificateur pour son exécution.