Golang n'est pas un processus unique, mais multithread ; le modèle de thread de golang est le modèle MPG. De manière générale, les processus Go et les threads du noyau ont une correspondance plusieurs-à-plusieurs, donc tout d'abord, il doit être multithread.
golang n'est pas un processus unique, mais multithread.
Golang a un modèle dit M ratio N. N go routines peuvent être créées sous M threads. De manière générale, N est beaucoup plus grand que M. Il s'agit essentiellement d'un modèle multi-thread, mais. la planification des coroutines dépend de la décision d'exécution de Go qui souligne que les développeurs doivent utiliser des canaux pour la synchronisation entre les coroutines.
Quant aux threads, le niveau de langage n'étant pas ouvert, vous pouvez le comprendre comme un modèle multi-coroutine. Plusieurs go routine
peuvent être créés sur un seul thread. De manière générale, le même nombre de threads que le. le nombre de cœurs de processeur sera créé. Bien entendu, le nombre est en fait déterminé par runtime
.
Concernant la planification de goroutine
, celle-ci est en fait en constante évolution et changement. Je ne parlerai que du modèle GMP qui s'exécute sur M threads. Chaque fois qu'une tâche est exécutée, le P (processeur) actuel. sera vérifiée. La file d'attente exécutable sur P contient des goroutines exécutables. Une fois qu'il n'y a plus de goroutine exécutable sur le P actuel, il volera la goroutine dans la file d'attente exécutable d'un autre P.
Théoriquement, la création de goroutines n'est limitée que par la mémoire. De manière générale, le maximum est de 2 Ko. Pour un thread avec 2 Mo d'espace, théoriquement, cela peut facilement atteindre 1 000. Bien sûr, ce n'est qu'une situation idéale. , donc le système d'exploitation Le nombre de threads n'augmentera pas à mesure que le nombre de goroutines créées augmente. La planification des threads est relativement gourmande en performances pour Go. Les changements fréquents de planification n'existeront qu'entre les goroutines, et les threads ne conserveront que le même nombre de threads actifs que le nombre de processeurs.
Recommandations d'apprentissage associées : Tutoriel de langue Go
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!