Golang est un modèle 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 correspondent à plusieurs à plusieurs, donc tout d'abord, ils doivent être multi-. fileté.
golang est un mode multithread.
Puisque p et m dans gmp lient p à m thread du noyau, alors le nombre maximum de p est déterminé par GOPROCESS, et le nombre de threads du noyau M sera limité à 10K par go , mais en raison pour des raisons de noyau, il ne peut pas faire grand-chose, donc cette restriction peut être traitée comme si elle n'existait pas. Prenez une photo pour clarifier
Golang a un modèle dit M ratio N. N go routines peuvent être créées sous M threads. . Il s'agit essentiellement d'un modèle multithread, mais la planification des coroutines est déterminée par Go runtime
, soulignant 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 le runtime.
Concernant la planification de goroutine
, celle-ci est en fait en constante évolution. 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 est vérifié. . 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, elle 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 il 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!