Maison > Article > développement back-end > Quelle est la différence entre les threads et les processus en langage Go
Différence : 1. Le thread est la plus petite unité d'exécution d'un programme, tandis que le processus est la plus petite unité de ressources allouées par le système d'exploitation. 2. Un processus se compose d'un ou plusieurs threads. Les threads sont différentes routes d'exécution du code dans un processus. 3. Le changement de contexte de thread est beaucoup plus rapide que le changement de contexte de processus. 4. La commutation de processus nécessite un maximum de ressources et est très inefficace ; la commutation de threads nécessite des ressources moyennes et a une efficacité moyenne. 5. Le processus a sa propre pile et la pile n'est pas partagée entre les processus ; le thread a sa propre pile et partage le tas.
L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.
Un processus
La plupart des systèmes d'exploitation (Windows, Linux) utilisent la préemption de rotation des tranches de temps pour la planification des tâches. méthode .
La méthode de planification est la suivante :
Dans un processus, lorsqu'une tâche de thread est exécutée pendant quelques millisecondes, elle sera planifiée par le noyau du système d'exploitation
Le processeur est interrompu via le compteur matériel, donc que le thread est forcé de faire une pause et que le registre du thread est mis en mémoire
Déterminez quel thread exécuter ensuite en regardant la liste des threads
Ensuite, le registre du thread est restauré à partir de la mémoire, et enfin l'exécution du thread reprend pour effectuer la tâche suivante
Cette méthode garantit que chaque thread s'exécute à tour de rôle. Étant donné que l'efficacité d'exécution du processeur est très élevée et que la tranche de temps est très courte, il peut rapidement basculer entre les tâches. , donnant l'impression que plusieurs tâches sont exécutées en même temps , c'est ce que nous appelons la concurrence.
Processeur multicœur fait référence à l'intégration de plusieurs cœurs de calcul sur un seul processeur pour améliorer la puissance de calcul. Autrement dit, il existe plusieurs cœurs de traitement pour un véritable calcul parallèle, et chaque cœur de traitement correspond à un thread du noyau.
Chaque cœur de traitement correspond à un fil du noyau. Par exemple :
Technologie Hyper-threading pour simuler un cœur de traitement physique en deux cœurs de traitement logique, c'est-à-dire deux threads du noyau. Ainsi, les ordinateurs que nous voyons sont généralement double cœur, quatre threads ou quatre cœurs, huit threads.
Dans le système d'exploitation, nous voyons que le nombre de processeurs est deux fois supérieur au nombre de processeurs physiques réels. Par exemple, les processeurs double cœur et quatre threads peuvent voir 4 processeurs.
thread.
Dans les applications traditionnelles, un thread est généralement créé pour les requêtes réseau afin de compléter la logique métier. S'il y a plusieurs demandes, plusieurs fils de discussion seront créés.
Si vous rencontrez un comportement d'E/S fastidieux, le thread sera toujours dans un état bloqué. Si de nombreux threads sont dans cet état inactif (en attendant que le thread termine son exécution avant de s'exécuter), cela entraînera une application de ressources incomplète. la capacité de débit du système diminue.
Le comportement d'E/S fastidieux le plus courant est celui de JDBC. Le CPU attendra toujours le retour de l'opération d'E/S de données. À ce stade, le thread n'utilise pas du tout le CPU pour effectuer des opérations. mais il est dans un état inactif. Utiliser trop de threads en même temps entraînera également davantage de surcharge de changement de contexte.
Il existe deux solutions aux problèmes ci-dessus :
Caractéristiques des coroutinesLe changement de thread est planifié par le système d'exploitation et les coroutines sont planifiées par l'utilisateur lui-même, donc le changement de contexte est réduit et l'efficacité est améliorée
Le principe de la coroutineLe processus de la coroutine :
Lorsque le blocage des E/S se produit, il est programmé par le planificateur de la coroutineParce que la suspension de la coroutine est entièrement contrôlée par le programme et se produit dans l'état utilisateur ; tandis que l'état de blocage du thread est commuté par le noyau du système d'exploitation et se produit dans l'état du noyau. Coroutine
负责调度的线程称为Fiber
,比如Golang里的go
关键字其实就是负责开启一个Fiber
,让func
Par conséquent, la surcharge des coroutines est bien inférieure à celle des threads, et il n'y a pas de surcharge de changement de contexte.
Coroutines | ||
---|---|---|
La taille initiale est généralement de 2 Ko , peut être augmenté selon les besoins | La planification appartient à | |
Elle est complétée par l'utilisateur | Surcharge de commutation | |
Seules trois valeurs de registre sont modifiées : PC, SP, DX | Problèmes de performances | |
L'utilisation des ressources est faible et n'entraînera pas de graves problèmes de performances | Synchronisation des données | |
Ne nécessite pas de mécanisme de verrouillage multithread, il y a donc un seul fil. Il n'y a pas de conflit dans l'écriture des variables en même temps. Les ressources partagées sont contrôlées dans la coroutine sans verrouillage, il vous suffit de déterminer l'état, donc l'efficacité d'exécution est bien supérieure à celle des threads |
Enseignement de la programmation】
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!