Maison >développement back-end >Golang >Comment le planificateur Go gère-t-il la création de M et P en présence d'opérations bloquantes ?

Comment le planificateur Go gère-t-il la création de M et P en présence d'opérations bloquantes ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 05:20:02574parcourir

How does the Go scheduler manage the creation of M and P in the presence of blocking operations?

Comprendre la création de M et P dans le planificateur Go

Le planificateur Go fonctionne sur un modèle impliquant des goroutines, des threads du système d'exploitation (M) et des contextes /processeurs (P). Pour optimiser les performances, le planificateur gère la création et l'utilisation de M et P de manière dynamique.

Création de M

M est créé lorsque le planificateur détecte un besoin d'exécuter un blocage tâches. Dans votre exemple de code, les goroutines effectuent des opérations de blocage de la base de données, ce qui déclenchera la création de M supplémentaires. Le nombre exact de M créés dépend du nombre de goroutines bloquées et des ressources système disponibles.

Création de P

P est créé lorsqu'une nouvelle goroutine est lancée. Cependant, le planificateur ne crée pas de nouveau P pour chaque goroutine. Au lieu de cela, il réutilise les instances P existantes, en conservant un nombre fixe de P égal à la valeur de GOMAXPROCS, généralement défini sur le nombre de processeurs disponibles.

Dans votre exemple de code

Dans votre code de test, vous créez 50 goroutines en deux lots. Étant donné que les opérations de la base de données sont bloquantes, M sera créé si nécessaire pour gérer les goroutines bloquantes. Cependant, comme les instances P sont réutilisées, seules 8 P seront créées, ce qui représente le nombre de cœurs virtuels sur votre système.

Plus de ressources

Pour une exploration plus approfondie de ce sujet sujet, reportez-vous à ces ressources :

  • [Go Goroutine, OS Thread et CPU Management](https://www.programming-books.net/2019/07/understand-go-scheduler- goroutine.html)
  • [Comprendre le modèle Go GMP (Goroutine-M-P)](https://blog.container-solutions.com/understanding-go-gmp-goroutine-m-p-model)

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!

Déclaration:
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