Relation : 1. Un processus peut avoir plusieurs threads, mais il existe 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 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. 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.
L'environnement d'exploitation de ce tutoriel : système Windows 7, ordinateur Dell G3.
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, un thread ne peut appartenir qu'à un seul processus, un processus peut avoir plusieurs threads, mais il y en a au au moins un thread
Chaque processus a un code et un espace de données indépendants (contexte du programme). La commutation entre les programmes peut être considérée comme des processus légers du même type partageant du code et un espace de données. En exécutant la pile et le compteur de programme (PC), le coût de commutation entre les threads est faible
Dans le système d'exploitation, plusieurs processus (programmes) peuvent être exécutés en même temps et plusieurs threads sont exécutés simultanément dans le même processus (programme) (grâce à la planification du processeur, dans chaque un seul thread s'exécute dans chaque tranche de temps)
Le système allouera un espace mémoire différent à chaque processus lorsqu'il est en cours d'exécution. À l'exception du processeur, le système n'allouera pas de mémoire pour le thread (les ressources). utilisées par le thread proviennent des ressources du processus auquel il appartient), les groupes de threads ne peuvent partager que des ressources
Aucun processus existant ne peut être considéré comme monothread. S'il y a plusieurs threads dans un processus, le processus d'exécution. n'est pas une ligne, et plusieurs threads (threads) sont courants. Complet
Les threads font partie du processus, donc les threads sont appelés processus légers/processus légers
La relation entre les processus et les threads
1. Un processus peut avoir plusieurs threads, mais il y a au moins un thread ; 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 du 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 : les segments de code du processus, les données publiques du processus (en utilisant ces données partagées, les threads peuvent facilement communiquer entre eux), les descripteurs de fichiers ouverts par le processus, les gestionnaires de signaux, les processus Le répertoire courant et ID utilisateur de processus et ID de groupe de processus.
Bien que les processus aient 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. Valeur définie du registre
Étant donné que les threads s'exécutent simultanément, chaque thread a ses propres indices d'exécution différents. Lors du passage d'un thread à un autre, l'ensemble de registres du thread d'origine doit être enregistré afin que l'état du thread soit enregistré. il peut être restauré lorsque le thread y reviendra ultérieurement.
3. Pile de threads
La pile est nécessaire pour garantir que les threads peuvent s'exécuter indépendamment.
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 retour d'erreur
Comme de nombreux threads s'exécutent dans le même processus en même temps, il est possible qu'un thread définisse la valeur errno après avoir effectué un appel système et avant que le thread n'ait traité l'erreur, un autre thread Il est mis en service par le planificateur à ce moment-là, la valeur de l'erreur peut donc être modifiée.
Ainsi, différents threads devraient avoir leurs propres variables de code de retour d'erreur.
5. Code de masquage du signal du fil
Puisque chaque fil s'intéresse à des signaux 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. Ce paramètre est la priorité du thread.
Cinq modes 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. La forme classique est que le canal est créé par le processus parent une fois que le processus a dérivé le processus enfant, il peut être utilisé entre les processus parent et enfant.
2. Canal nommé (FIFO)
Les processus non pertinents peuvent également échanger des données.
3. File d'attente de messages
La file d'attente de messages est une liste chaînée de messages, qui est une série de listes de messages stockés dans le noyau. 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 spécifique et une priorité spécifique. 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
Le sémaphore est un compteur, qui est principalement utilisé lorsque plusieurs processus doivent accéder à des données partagées. Compte tenu de cette situation, deux processus ne peuvent pas accéder aux mêmes données en même temps, donc une telle chose peut être accomplie à l'aide de sémaphores.
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 la décrémenter de 1, indiquant qu'elle est actuellement utilisée
Si la la valeur du sémaphore est 0, le processus se met en veille jusqu'à ce que la valeur du sémaphore soit supérieure à 0. En d'autres termes, il fournit en fait un moyen de synchronisation d'accès entre différents processus ou différents threads d'un processus.
5. Mémoire partagéeLa mémoire partagée permet à deux ou plusieurs processus de partager une zone de stockage donnée. Cette zone de stockage peut être mappée dans son propre espace d'adressage par deux ou plusieurs processus. Les informations écrites par un processus à partager. la mémoire peut être lue par d'autres processus utilisant cette mémoire partagée via une simple lecture de mémoire, réalisant ainsi une 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, elles doivent être effectuées dans le système. le noyau et l'espace utilisateur. Les données sont copiées quatre fois, tandis que la mémoire partagée n'est copiée que deux fois : une du fichier d'entrée vers la zone de mémoire partagée et l'autre de la mémoire partagée vers le fichier de sortie.
D'une manière générale, lorsque les processus partagent de la mémoire, ils ne démappent pas toujours après avoir lu et écrit une petite quantité de données, et rétablissent la zone de mémoire partagée lorsqu'il y a une nouvelle communication, mais la zone partagée est maintenue jusqu'à ce que la communication soit terminée ; De cette manière, le contenu des données est toujours enregistré dans la mémoire partagée et n'est pas réécrit dans le fichier. Le contenu de la mémoire partagée est souvent réécrit dans le fichier lorsqu'il n'est pas mappé. Par conséquent, la méthode de communication utilisant la mémoire partagée est très efficace.
6. Socket :Socket est également un mécanisme de communication inter-processus, contrairement à d'autres mécanismes de communication, il peut être utilisé pour la communication de processus entre différents ordinateurs.
7. Signal (sinal)Le signal est une méthode de communication relativement complexe, utilisée pour informer le processus de réception qu'un événement s'est produit
Pour plus de connaissances connexes, veuillez visiter la colonne
FAQCe 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!