Sobes.tech
Senior

Qu'est-ce qu'une goroutine ? En quoi diffère-t-elle d'un thread système ? Parle du planificateur Go (GMP).

sobes.tech IA

Réponse de l'IA

Goroutine est un fil d'exécution léger dans le langage Go, géré par le runtime de Go et non par le système d'exploitation. Contrairement à un thread système, les goroutines ont une taille de pile beaucoup plus petite (commençant à quelques kilo-octets et pouvant croître dynamiquement), ce qui permet d'exécuter des milliers voire des millions de goroutines simultanément avec peu de surcharge.

Les threads système sont créés et planifiés par le système d'exploitation, ont une pile fixe importante et des opérations de changement de contexte plus coûteuses.

Le planificateur de Go est basé sur le modèle GMP:

  • G (goroutine) — la goroutine elle-même, unité d'exécution.
  • M (machine) — thread système (thread OS) sur lequel s'exécutent les goroutines.
  • P (processeur) — processeur logique, ressource nécessaire pour exécuter une goroutine sur M.

P gère la file d'attente des goroutines prêtes à être exécutées (G). M peut exécuter une seule goroutine à la fois, mais grâce à la présence de plusieurs M et P, le planificateur répartit efficacement les goroutines entre les threads système, assurant concurrence et parallélisme.

Cette approche permet à Go d'utiliser efficacement les ressources système et de s'adapter aux systèmes multiprocesseurs.