Maison >Opération et maintenance >Sécurité >Quelle est la relation entre les threads et les processus ?

Quelle est la relation entre les threads et les processus ?

王林
王林avant
2023-05-22 22:35:131147parcourir

Un processus doit avoir au moins un thread, mais peut avoir plusieurs threads. Un thread ne peut s'exécuter que dans l'espace d'adressage d'un seul processus. 2. Les ressources sont allouées aux processus et tous les threads du même processus partagent toutes les ressources du processus. 3. Le processeur est alloué aux threads, c'est-à-dire que les threads s'exécutent réellement sur le processeur. Afin d'obtenir la synchronisation, les threads d'exécution doivent coopérer les uns avec les autres et les threads inter-processus doivent utiliser la communication par messages.

Le processus est l'unité de base de l'allocation des ressources, le thread est l'unité de base de la planification et de la répartition du processeur

Le thread fait partie du processus et un thread peut n'appartient qu'à un seul processus , un processus peut avoir plusieurs threads, mais il y a au moins un thread

Chaque processus a un code et un espace de données indépendants (contexte du programme), basculer entre les programmes est coûteux et les threads peuvent être considéré comme des processus légers de l'ordre de grandeur, les threads du même type partagent le code et l'espace de données, chaque thread a sa propre pile d'exécution indépendante et son propre compteur de programme (PC), et le coût de commutation entre les threads est faible

Peut être effectué simultanément dans le système d'exploitation Exécutez plusieurs processus (programmes) et plusieurs threads s'exécutent simultanément dans le même processus (programme) (grâce à la planification du processeur, un seul thread s'exécute dans chaque tranche de temps)

# 🎜🎜#Lorsque le système est en cours d'exécution Un espace mémoire différent sera alloué à chaque processus. Hormis le CPU, le système n'allouera pas de mémoire au thread (les ressources utilisées par le thread proviennent des ressources du processus auquel il appartient). ). Les ressources ne peuvent être partagées qu'entre les groupes de threads

# 🎜🎜#Il n'existe pas de processus prêt à l'emploi qui puisse être considéré comme monothread. S'il y a plusieurs threads dans un processus, le processus d'exécution n'est pas une seule ligne. , et plusieurs threads (threads) sont complétés ensemble

Les threads font partie du processus , donc le thread est appelé un processus léger/processus léger



La relation entre le processus et le thread

1. Un processus peut avoir plusieurs threads, mais il doit y avoir au moins un thread et un thread ne peut être actif que dans l'espace d'adressage d'un processus.

2. Les ressources sont allouées aux processus, et tous les threads d'un même processus partagent toutes les ressources du processus.

3. Le CPU est alloué aux threads, c'est-à-dire que les threads s'exécutent réellement sur le processeur.

4. Les threads doivent coopérer et se synchroniser pendant l'exécution. Les threads de différents processus doivent utiliser la communication par message pour réaliser la synchronisation.

Que peut-on partager entre les processus ?

L'environnement partagé par les threads comprend : des segments de code de processus, des données publiques du processus (en utilisant ces données partagées, les threads peuvent facilement communiquer entre eux) et des descriptions de fichiers ouverts par le processus symbole, le gestionnaire de signal, le répertoire actuel du processus, ainsi que l'ID utilisateur du processus et l'ID du groupe de processus.

Si les processus présentent de nombreux points communs, ils ont aussi leur propre personnalité. Avec ces personnalités, les threads peuvent atteindre la concurrence. Ces personnalités incluent :

1. ID de fil de discussion

Chaque fil de discussion a son propre ID de fil de discussion, qui est unique dans ce processus. Les processus l'utilisent pour identifier les threads.

2. Enregistrez la valeur du groupe

Étant donné que les threads s'exécutent simultanément, chaque thread a ses propres indices d'exécution différents. Lorsque vous passez d'un thread à un autre thread, l'état de l'ensemble de registres du thread d'origine doit être enregistré afin que le thread puisse être restauré lors de son retour ultérieur.

3. Pile de threads

La pile est nécessaire pour garantir que le thread s'exécute de manière indépendante. Les fonctions de thread peuvent appeler des fonctions, et les fonctions appelées peuvent être imbriquées couche par couche, le thread doit donc avoir sa propre pile de fonctions afin que l'appel de fonction puisse être exécuté normalement sans être affecté par d'autres threads.

4. Code de retour d'erreur

Comme de nombreux threads s'exécutent dans le même processus en même temps, il est possible qu'un certain thread définisse le numéro d'erreur valeur après avoir effectué un appel système et avant que le thread n'ait traité cette erreur, un autre thread est mis en service par le planificateur à ce moment-là, la valeur de l'erreur peut donc être modifiée.
Ainsi, différents threads doivent avoir leurs propres variables de code de retour d'erreur.

5. Code de masquage du signal du fil

Étant donné que les signaux qui intéressent chaque fil sont différents, le code de masquage du signal du fil doit être géré par le fil lui-même . Mais tous les threads partagent le même gestionnaire de signal.

6. Priorité du thread

Puisque les threads doivent être planifiés comme les processus, il doit y avoir des paramètres disponibles pour la planification. .

Cinq façons de communication inter-processus

1 (Sans nom) Pipe

#. 🎜🎜#Half-duplex, c'est-à-dire que les données ne peuvent pas être transmises dans les deux sens en même temps. Certains systèmes peuvent prendre en charge le mode full duplex.

Uniquement entre les processus parent et enfant. Dans sa forme classique, le processus parent crée un canal puis divise le processus enfant, permettant ainsi une utilisation entre les processus parent et enfant.

2. Tube nommé (FIFO)

Les processus non pertinents peuvent également échanger des données.

3. File d'attente de messages

Une file d'attente de messages est une liste de messages stockés dans le noyau, similaire à une liste chaînée de messages. Les processus utilisateur peuvent ajouter des messages à la file d'attente des messages et lire les messages de la file d'attente des messages.

Par rapport à la communication par pipeline, l'avantage de la file d'attente des messages est de spécifier un type de message spécifique pour chaque message. Lors de la réception, vous n'avez pas besoin de suivre l'ordre de la file d'attente, mais vous pouvez recevoir des types de messages spécifiques en fonction de conditions personnalisées.

Vous pouvez considérer un message comme un enregistrement, avec un format et une priorité spécifiques. Un processus disposant d'autorisations d'écriture sur la file d'attente des messages peut ajouter de nouveaux messages à la file d'attente des messages selon certaines règles, et un processus disposant d'autorisations de lecture sur la file d'attente des messages peut lire les messages de la file d'attente des messages.

4. Sémaphore

Lorsque plusieurs processus doivent accéder à des données partagées, le sémaphore est un compteur et est principalement utilisé à cette fin. Si vous devez vous assurer que les mêmes données ne sont pas accédées par deux processus en même temps, vous pouvez utiliser un sémaphore.

Son processus principal est le suivant :

Vérifier le sémaphore qui contrôle la ressource

Si la valeur du sémaphore est supérieure à 0, la ressource est disponible et sera Il est réduit de 1, indiquant qu'il est actuellement utilisé. Un moyen de synchroniser l'accès entre différents processus ou différents threads d'un processus.

5. Mémoire partagée

La mémoire partagée permet à deux processus ou plus de partager une zone de stockage donnée. Cette zone de stockage peut être mappée. son propre espace d'adressage par deux ou plusieurs processus. Les informations écrites par un processus dans la mémoire partagée peuvent être lues par d'autres processus utilisant cette mémoire partagée via une simple communication inter-processus. L'un des principaux avantages de l'utilisation de la mémoire partagée pour la communication est une efficacité élevée, car le processus peut directement lire et écrire dans la mémoire sans aucune copie de données. Pour les méthodes de communication telles que les canaux et les files d'attente de messages, c'est le cas. Les données nécessaires sont copiées quatre fois entre le noyau et l'espace utilisateur, tandis que la mémoire partagée n'est copiée que deux fois : une fois du fichier d'entrée vers la zone de mémoire partagée, et l'autre fois de la mémoire partagée vers le fichier de sortie.

De manière générale, lorsque les processus partagent de la mémoire, ils ne se démapperont pas toujours après avoir lu et écrit une petite quantité de données. Lorsqu'il y a une nouvelle communication, la zone de mémoire partagée est rétablie ; La zone est conservée jusqu'à ce que la communication soit terminée. De cette manière, le contenu des données est conservé dans la mémoire partagée et n'est pas réécrit dans le fichier. Étant donné que le contenu de la mémoire partagée est généralement réécrit dans le fichier lorsqu'il n'est pas mappé, la méthode d'utilisation de la mémoire partagée pour la communication est extrêmement efficace.

6. Socket :

Socket est également un mécanisme de communication inter-processus différent des autres mécanismes de communication, il peut être utilisé pour le processus. communication entre différents ordinateurs.

7. Signal ( sinal )

Le signal est une méthode de communication relativement complexe utilisée pour notifier le processus récepteur qu'un événement s'est produit # 🎜🎜#

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer