Golang est un multi-processus, et son modèle de thread 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-thread. 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 multithread. runtime de Go Il est souligné que les développeurs doivent utiliser des canaux pour la synchronisation entre les coroutines.
L'environnement d'exploitation de cet article : système Windows 10, version go1.20, ordinateur DELL G3.
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 multithread, mais la planification des coroutines est déterminée par. Le runtime de Go, mettant l'accent sur le développement, les lecteurs doivent utiliser des canaux pour la synchronisation entre les coroutines.
En ce qui concerne les threads, puisque le niveau de langage n'est pas ouvert, vous pouvez le comprendre comme un modèle multi-coroutine. Plusieurs routines go peuvent être créées sur un thread. De manière générale, le même nombre de threads que le nombre de cœurs de processeur seront. être créé. Bien sûr, en fait, cela est toujours déterminé par le temps d'exécution.
Concernant la planification de goroutine, celle-ci est en fait en constante évolution. Je ne parlerai que du modèle GMP. Goroutine s'exécute sur M threads, il vérifiera la file d'attente exécutable sur le P (processeur) actuel. Il y a des goroutines exécutables dans la file d'attente. 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 des exécutables 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 nombre de. Les threads du système d'exploitation n'augmenteront 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.
À propos des processus et des threads
1. Processus
Un processus est un processus d'exécution d'un programme dans le système d'exploitation. Il s'agit de l'unité de base pour l'allocation et la planification des ressources par le système. l'exécution du programme. L'unité de base d'allocation et de gestion des ressources dans le processus. Chaque processus possède son propre espace d'adressage. Un processus a au moins 5 états de base : état initial, état d’exécution, état d’attente, état prêt et état de fin.
En termes simples : un processus est un programme en cours d’exécution.
2. Thread
Un thread est une instance d'exécution d'un processus et la plus petite unité d'exécution d'un programme. C'est une unité de base qui est plus petite qu'un processus et peut s'exécuter indépendamment.
En termes simples : un processus peut créer plusieurs threads, et plusieurs threads dans le même processus peuvent s'exécuter simultanément pour qu'un programme s'exécute, il doit y avoir au moins un processus.
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!