Maison > développement back-end > Golang > Comment le planificateur Go crée-t-il de nouveaux M et P lorsque les Goroutines effectuent des opérations de blocage ?

Comment le planificateur Go crée-t-il de nouveaux M et P lorsque les Goroutines effectuent des opérations de blocage ?

Patricia Arquette
Libérer: 2024-10-30 02:18:28
original
497 Les gens l'ont consulté

How Does the Go Scheduler Create New M and P When Goroutines Perform Blocking Operations?

Quand Go Scheduler crée de nouveaux M et P dans le modèle GMP

Dans le modèle GMP (Goroutine, Machine, Processor) de Go, le planificateur gère la création de M (Machine) et P (Processeur) en fonction de conditions spécifiques.

Création M

M est créé en réponse à des événements spécifiques, tels que :

  • Opérations de blocage : Lorsqu'une goroutine effectue une opération de blocage (par exemple, E/S, appel système), le M associé à cette goroutine est bloqué. Pour continuer à exécuter la goroutine, le planificateur crée un nouveau M.
  • Pipelines de planification : Lorsque la file d'attente G globale, qui stocke les goroutines en attente d'exécution, a plus de goroutines que le nombre de M disponibles , le planificateur crée un nouveau M pour exécuter les goroutines.

P Création

P est créé au démarrage du programme en fonction de la variable d'environnement GOMAXPROCS, qui spécifie le nombre maximum de P disponibles. La valeur par défaut est le nombre de processeurs logiques sur le système.

Exemple d'analyse

Dans votre exemple de code, vous avez deux lots de goroutines exécuter des opérations de base de données. Chaque goroutine effectue une opération d'E/S bloquante.

  • Premier lot : Le planificateur créera 8 M (puisque vous avez 8 cœurs virtuels) et 1 P pour exécuter le premier lot de goroutines. Chaque M exécutera une goroutine à partir de la file d'attente locale de P.
  • Deuxième lot : Puisque les opérations de blocage provoquent le blocage du M initial, le planificateur créera un nouveau M pour les goroutines restantes dans le deuxième lot. Le M sera associé à un nouveau P, même si le nombre de P reste à 1.

Donc, dans votre cas, le planificateur créera plus de 8 M pour le deuxième lot de goroutines car les opérations bloquent. Le P sera limité à 1 en fonction de la valeur GOMAXPROCS, mais M sera créé dynamiquement selon les besoins.

Ressources supplémentaires

Pour une meilleure compréhension, reportez-vous à ce qui suit ressources :

  • https://www.programmersought.com/article/79557885527/
  • https://blog.golang.org/go-goroutine-os-thread-and -gestion du processeur

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal