Dans quels cas une tâche lancée dans une goroutine peut-elle être ajoutée à la file d'attente globale du planificateur?
sobes.tech IA
Réponse de l'IA
En Go, une tâche exécutée dans une goroutine peut être ajoutée à la file d'attente globale du planificateur dans les cas suivants :
-
Lorsque la goroutine est créée avec
go: Lors de l'appel àgo func() { ... }(), une nouvelle goroutine est créée et placée dans la file d'attente globale du planificateur pour l'exécution. -
Si le thread actuel (M) est occupé ou surcharge : Le planificateur peut déplacer la goroutine dans la file d'attente globale pour répartir la charge entre les threads.
-
Lorsqu'une goroutine est bloquée : Si la goroutine attend une ressource (par exemple, un canal ou un temporisateur), elle peut être suspendue, puis, après déblocage, ajoutée à la file d'attente globale.
-
Lorsque la file locale du planificateur est vide : Le planificateur peut prendre des tâches de la file globale pour équilibrer la charge.
Exemple de création de goroutine :
func main() {
go func() {
fmt.Println("Bonjour depuis la goroutine")
}()
time.Sleep(time.Second) // pour permettre à la goroutine de s'exécuter
}
Ici, la goroutine est immédiatement ajoutée à la file d'attente globale du planificateur pour son exécution.