Skip to content

Runtime

Le runtime du langage Go est l'infrastructure centrale de l'exécution des programmes Go. Il est responsable de la gestion de l'allocation mémoire, du ramasse-miettes (garbage collection), de l'ordonnancement des goroutines, de la surveillance système et d'autres fonctions critiques. Contrairement à d'autres langages, le runtime Go est étroitement intégré au code utilisateur, ce qui permet à Go de réaliser une programmation concurrente efficace et une gestion automatique de la mémoire.

Composants principaux

Le runtime Go est principalement composé des composants centraux suivants :

Ordonnanceur GMP

L'ordonnanceur GMP est l'un des composants les plus centraux du runtime Go. Il est responsable de l'ordonnancement rationnel d'un grand nombre de goroutines sur un nombre limité de threads système. GMP représente respectivement :

  • G (Goroutine) : Goroutine, le thread léger de Go
  • M (Machine) : Thread système, le thread d'exécution au niveau du système d'exploitation
  • P (Processor) : Processeur, contient les ressources nécessaires à l'exécution du code Go

La conception de l'ordonnanceur GMP permet à Go de supporter efficacement des dizaines de milliers de goroutines concurrentes, c'est la pierre angulaire des caractéristiques de haute concurrence de Go.

Allocateur mémoire

L'allocateur mémoire de Go est responsable de la gestion de l'allocation de la mémoire tas. Sa conception est fortement influencée par TCMalloc de Google. Les caractéristiques principales incluent :

  • Conception de cache multi-niveaux, réduisant la contention des verrous
  • Stratégies d'allocation différentes selon la taille des objets
  • Décision automatique de l'allocation des objets sur la pile ou le tas

L'allocateur mémoire travaille en étroite collaboration avec le ramasse-miettes pour réaliser une gestion mémoire efficace.

Ramasse-miettes

Go adopte l'algorithme de ramasse-miettes par marquage-balayage concurrent (Concurrent Mark-Sweep). Les caractéristiques principales sont :

  • Algorithme de marquage tricolore
  • Technologie de barrière d'écriture pour réaliser le ramasse-miettes concurrent
  • Faible latence, dans la plupart des cas le temps STW est inférieur à 100 microsecondes

Le ramasse-miettes de Go a été optimisé pendant de nombreuses années et peut désormais satisfaire les besoins de performance de la grande majorité des scénarios métier.

Surveillant système

Le surveillant système (sysmon) est un thread de surveillance indépendant, responsable de :

  • La préemption des goroutines s'exécutant longtemps
  • La vérification du besoin de déclencher le ramasse-miettes
  • La surveillance de l'état du système et les ajustements correspondants

Il fonctionne en permanence en arrière-plan, garantissant le fonctionnement stable des programmes Go.

Recommandations d'apprentissage

Il est recommandé d'apprendre les connaissances liées au runtime dans l'ordre suivant :

  1. D'abord apprendre l'ordonnanceur GMP, pour comprendre le mécanisme d'ordonnancement des goroutines
  2. Puis apprendre l'allocateur mémoire, pour comprendre comment la mémoire est allouée
  3. Ensuite apprendre le ramasse-miettes, pour comprendre comment la mémoire est récupérée
  4. Enfin apprendre le surveillant système, pour comprendre le mécanisme de surveillance en arrière-plan du runtime

Golang by www.golangdev.cn edit