Sobes.tech
Junior — Middle

Expliquez pourquoi il n'est pas possible de faire correspondre directement le nombre de threads au nombre de goroutines en Go.

sobes.tech IA

Réponse de l'IA

En Go, le nombre de goroutines ne correspond pas au nombre de threads du système d'exploitation, car les goroutines sont des threads légers gérés par le runtime de Go, et non par le système d'exploitation.

Principales raisons :

  • Multiplexage : Le runtime de Go répartit de nombreuses goroutines sur un nombre limité de threads système, en changeant efficacement entre eux.
  • Légèreté : Créer une goroutine nécessite beaucoup moins de ressources que de créer un thread système.
  • Planificateur de Go : Il gère l'exécution des goroutines, permettant à des milliers d'entre elles de fonctionner sur plusieurs threads.

Pour cette raison, il n'est pas possible d'associer directement le nombre de goroutines au nombre de threads — généralement, un thread gère plusieurs goroutines, ce qui permet d'utiliser efficacement les ressources et de simplifier la programmation concurrente.

Exemple :

runtime.GOMAXPROCS(4) // Définit le nombre de threads du système

for i := 0; i < 1000; i++ {
    go func(id int) {
        fmt.Println("Goroutine", id)
    }(i)
}

Ici, 1000 goroutines fonctionneront sur 4 threads du système.