Sobes.tech
Junior — Middle

Comment l'équilibrage de l'exécution des goroutines est-il effectué dans un programme?

sobes.tech IA

Réponse de l'IA

L'équilibrage de l'exécution des goroutines en Go est géré par le planificateur (scheduler) intégré dans le runtime. Le planificateur répartit les goroutines entre les threads système disponibles (threads OS), en utilisant un modèle M:N, où M est le nombre de threads et N le nombre de goroutines.

Points clés :

  • Il y a beaucoup de goroutines, elles sont légères et changent de contexte sans intervention du système d'exploitation.
  • Le planificateur utilise des algorithmes similaires à la multitâche coopérative, mais avec la capacité d'interruption.
  • Les goroutines se voient attribuer des threads, et si une goroutine se bloque (par exemple, en entrée/sortie), le planificateur en change.

Exemple :

func main() {
    for i := 0; i < 10; i++ {
        go func(id int) {
            fmt.Println("Goroutine", id)
        }(i)
    }
    time.Sleep(time.Second) // Attend la fin des goroutines
}

Ici, le planificateur répartira 10 goroutines entre les threads disponibles, assurant un équilibrage et une utilisation efficace du CPU.