


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.
Que sont les threads et les processus ?
Un processus
- est un programme avec certaines fonctions indépendantes Un processus d'exécution dynamique sur un ensemble de données
- est une unité indépendante pour l'allocation des ressources et la planification par le système d'exploitation
- Le transporteur d'exécution d'application
- Un thread est un processus de contrôle séquentiel unique dans l'exécution d'un programme
- C'est la plus petite unité du flux d'exécution d'un programme
- C'est l'unité de base de la planification et de l'allocation du processeur
- Un processus peut avoir un ou plusieurs threads
- L'espace mémoire du programme est partagé entre chaque thread
Planification des tâches
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.
La différence entre les processus et les threads
- Un thread est la plus petite unité d'exécution d'un programme, tandis qu'un processus est la plus petite unité de ressources allouées par le système d'exploitation
- Un processus consiste d'un ou plusieurs threads, les threads sont différentes routes d'exécution de code dans un processus
- Le changement de contexte de thread est beaucoup plus rapide que le changement de contexte de processus
- Le changement de processus nécessite les plus grandes ressources et est très inefficace. et son efficacité est moyenne.
- Le processus a sa propre pile, la pile n'est pas partagée entre les processus et est planifiée par le système d'exploitationLes threads ont leur propre pile, un tas partagé et sont également planifiés par le système d'exploitation
Multi-threading et multi-core
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 :
- Un processeur monocœur correspond à un thread du noyau
- Un processeur dual-core correspond à deux threads du noyau
- Un processeur quad-core correspond à quatre threads du noyau
Technologie Hyper-threading
Actuellement, les processeurs utilisent laTechnologie 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.
Coroutines
Les coroutines sont basées sur des threads et sont plus légères que les threads. Un thread peut avoir plusieurs coroutines.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 :
- Un seul thread plus un rappel asynchrone
Par exemple, Node.js, Java's Vert Abandonnez la planification actuelle de la coroutine et exécutez la tâche suivante pour éliminer la surcharge de ContexSwith -
.
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
- La taille de pile par défaut du thread est de 1 Mo , tandis que la coroutine est plus légère, proche de 1K. Par conséquent, plusieurs coroutines peuvent être ouvertes dans la même mémoire
- Étant donné que les coroutines sont sur le même thread, la concurrence peut être évitée. Deuxièmement, l'utilisation de verrous
- convient aux scénarios bloqués et nécessitant beaucoup de concurrence. Mais il n'est pas adapté au multi-threading avec de grandes quantités de calculs
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 coroutine- En cédant le flux de données immédiatement (en abandonnant activement) et en enregistrant les données sur la pile actuelle
- Une fois le blocage terminé, la pile est immédiatement restaurée via le thread et le résultat du blocage est mis sur ce fil pour courir
- court dessus par logique.
Parce 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.
Comparaison des threads et des coroutines
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

La bibliothèque utilisée pour le fonctionnement du numéro de point flottante dans le langage go présente comment s'assurer que la précision est ...

Problème de threading de file d'attente dans Go Crawler Colly explore le problème de l'utilisation de la bibliothèque Crawler Crawler dans le langage Go, les développeurs rencontrent souvent des problèmes avec les threads et les files d'attente de demande. � ...

Gérez efficacement les problèmes de sécurité de la concurrence dans la rédaction de journaux multiproces. Plusieurs processus écrivent le même fichier journal en même temps. Comment s'assurer que la concurrence est sûre et efficace? C'est un ...

En ce qui concerne le problème des balises de structure personnalisées dans Goland lorsque vous utilisez Goland pour le développement du langage GO, vous rencontrez souvent des problèmes de configuration. L'un d'eux est ...

La suppression automatique des contraintes de type de fonction générique Golang dans les utilisateurs de VScode peut rencontrer un problème étrange lors de l'écriture de code Golang à l'aide de VScode. quand...

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

La différence entre l'impression de chaîne dans le langage go: la différence dans l'effet de l'utilisation de fonctions println et string () est en Go ...

Stratégie d'optimisation des performances pour l'accès à URL massif du langage GO Cet article propose une solution d'optimisation des performances pour le problème de l'utilisation du langage GO pour traiter l'accès massif de l'URL. Programmes existants de CSV ...
