Question d'entretien PHP 1 : La différence entre les threads et les processus (d'ailleurs, les coroutines sont mentionnées)

不言
Libérer: 2023-03-24 09:14:02
original
5849 Les gens l'ont consulté

Le contenu de cet article porte sur la différence entre les threads et les processus dans la question 1 de l'entretien PHP (d'ailleurs, les coroutines sont mentionnées). Il a une certaine valeur de référence. Maintenant, je le partage avec vous. à cela

1. Qu'est-ce qu'un processus > et d'autres ressources. Un processus comprend généralement un

jeu d'instructions et des ressources système

, où le jeu d'instructions est votre code et les ressources système font référence au processeur, à la mémoire, aux E/S, etc.

Un processus est un processus d'exécution dynamique d'un programme dans un ensemble de données. Il peut être simplement compris comme

"le programme en cours d'exécution". Il s'agit d'une unité indépendante d'allocation et de planification des ressources CPU. . Un processus se compose généralement de trois parties : programme, ensemble de données et bloc de contrôle de processus. Le programme que nous écrivons est utilisé pour décrire les fonctions que le processus doit remplir et comment le réaliser ; l'ensemble de données correspond aux ressources que le programme doit utiliser pendant l'exécution ; le bloc de contrôle de processus est utilisé pour enregistrer les caractéristiques externes du processus ; , décrit le processus de changement d'exécution du processus et le système. Il peut être utilisé pour contrôler et gérer les processus. C'est le seul signe que le système détecte l'existence d'un processus. La limitation des processus est que les frais généraux de création, d'annulation et de changement sont relativement élevés.

2. Qu'est-ce qu'un thread

Un thread est un flux d'exécution d'un processus. Un thread ne peut pas allouer de ressources système. Il fait partie du processus et constitue une unité plus petite qui s'exécute de manière indépendante. que le processus. Expliquez : le processus a deux caractéristiques : l'une est la propriété des ressources et l'autre est la planification de l'exécution (jeu d'instructions). Les threads font partie de la planification de l'exécution et font référence au chemin d'exécution du processus, également appelé flux d'exécution du programme. Les threads sont parfois appelés processus légers.
Les threads sont un concept développé après des processus. Un thread est également appelé processus léger. Il s'agit d'une unité d'exécution de base du processeur et de la plus petite unité du processus d'exécution du programme. Elle est composée d'un ID de thread, d'un compteur de programme, d'un ensemble de registres et d'une pile. Un processus peut contenir plusieurs threads. L'avantage des threads est qu'ils réduisent la surcharge d'exécution simultanée des programmes et améliorent les performances de concurrence du système d'exploitation. L'inconvénient est que les threads ne disposent pas de leurs propres ressources système et ne disposent que de ressources essentielles pendant l'exécution. mais chaque thread du même processus Les threads peuvent partager les ressources système appartenant au processus. Si le processus est comparé à un atelier, alors les threads sont comme des travailleurs dans l'atelier. Cependant, il existe un mécanisme de verrouillage pour certaines ressources exclusives, et une mauvaise manipulation peut provoquer un « blocage ».

3. Qu'est-ce qu'une coroutine ?

Une coroutine est un thread léger en mode utilisateur, également appelé micro-thread. Le nom anglais est Coroutine. contrôlé par l'utilisateur. Les gens comparent généralement les

coroutines et les sous-programmes
(fonctions).

Un appel de sous-programme a toujours une entrée et revient une fois. Une fois sorti, l'exécution du sous-programme est terminée.

Le point de départ de la coroutine est le premier point d'entrée dans la coroutine, le point d'entrée suivant est après le point de retour. En python, les coroutines peuvent appeler d'autres coroutines via le rendement. La relation entre les coroutines qui transfèrent les droits d'exécution via la méthode de rendement n'est pas la relation entre l'appelant et l'appelé, mais est symétrique et égale l'une à l'autre, et ils travaillent ensemble pour accomplir la tâche grâce à une coopération mutuelle. Le processus général de son fonctionnement est le suivant : Dans la première étape, la coroutine A commence à s'exécuter. Dans la deuxième étape, la coroutine A est exécutée à mi-chemin et entre dans une pause. Le droit d'exécution est transféré à la coroutine B via la commande rendement.
La troisième étape : (après un certain temps) Coroutine B restitue les droits d'exécution.

La quatrième étape, la coroutine A reprend l'exécution.

La caractéristique de la coroutine est qu'elle est exécutée dans un seul thread. Par rapport au multi-threading, ses avantages se reflètent dans :

* L'efficacité d'exécution de la coroutine est très élevée. Étant donné que la commutation de sous-programmes n'est pas une commutation de thread, mais est contrôlée par le programme lui-même, il n'y a pas de surcharge de commutation de thread. Par rapport au multithread, plus le nombre de threads est grand, plus les avantages en termes de performances des coroutines sont évidents.
* Les coroutines ne nécessitent pas de mécanismes de verrouillage multithread. Il n'est pas nécessaire de verrouiller les ressources partagées dans la coroutine, il vous suffit de déterminer l'état.
Conseils : le moyen le plus simple d'utiliser un processeur multicœur est le multiprocessus + coroutine, qui non seulement exploite pleinement le multicœur, mais donne également pleinement accès à la haute efficacité de la coroutine et peut atteindre des performances extrêmement élevées. .

4. La relation entre les processus et les threads

Un processus est comme un propriétaire, avec un terrain (ressources du système), et un thread est comme un locataire (thread, exécutant le processus d'agriculture). Chaque propriétaire (processus) n’a besoin que d’un seul locataire actif (thread).

Processus - la plus petite unité d'allocation de ressources, relativement robuste, les plantages n'affectent généralement pas les autres processus, mais le changement de processus consomme des ressources et est moins efficace.

Thread - la plus petite unité d'exécution du programme. Il n'y a pas d'espace d'adressage indépendant. Si un thread meurt, l'ensemble du processus peut mourir, mais il économise des ressources et a une efficacité de commutation élevée.

5. Processus et threads courants dans la programmation PHP

1. Dans les applications Web, nous créons un processus PHP à chaque fois que nous accédons à PHP, et bien sûr, nous créerons également au moins un fil PHP.
2. PHP utilise pcntl pour la programmation multi-processus
3. PHP utilise pthreads pour la programmation multi-thread
4 de nginx pour chaque processus. n'a qu'un seul thread , et chaque thread peut gérer l'accès de plusieurs clients
5. php-fpm utilise le modèle multi-processus , chaque processus Il n'y a qu' un seul thread, et chaque thread ne peut gérer qu'un seul accès client .
6. Apache peut utiliser un modèle multi-processus ou un modèle multi-thread, selon le SAPI utilisé
7 Le processus est la plus petite unité d'allocation de ressources CPU, et le fil est La plus petite unité de planification du processeur

1 Qu'est-ce qu'un processus

Un processus est une instance d'exécution de programme Un processus. peut être attribué à un processeur et à une mémoire et à d'autres ressources. Un processus comprend généralement un jeu d'instructions et des ressources système , où le jeu d'instructions est votre code et les ressources système font référence au processeur, à la mémoire, aux E/S, etc.

Un processus est un processus d'exécution dynamique d'un programme dans un ensemble de données. Il peut être simplement compris comme "le programme en cours d'exécution". Il s'agit d'une unité indépendante d'allocation et de planification des ressources CPU. .
Un processus se compose généralement de trois parties : programme, ensemble de données et bloc de contrôle de processus . Le programme que nous écrivons est utilisé pour décrire les fonctions que le processus doit remplir et comment le réaliser ; l'ensemble de données correspond aux ressources que le programme doit utiliser pendant l'exécution ; le bloc de contrôle de processus est utilisé pour enregistrer les caractéristiques externes du processus ; , décrit le processus de changement d'exécution du processus et le système. Il peut être utilisé pour contrôler et gérer les processus. C'est le seul signe que le système détecte l'existence d'un processus.
La limitation des processus est que les frais généraux de création, d'annulation et de changement sont relativement élevés.

2. Qu'est-ce qu'un thread

Un thread est un flux d'exécution d'un processus. Un thread ne peut pas allouer de ressources système. Il fait partie du processus et constitue une unité plus petite qui s'exécute de manière indépendante. que le processus.
Expliquez : le processus a deux caractéristiques : l'une est la propriété des ressources et l'autre est la planification de l'exécution (jeu d'instructions). Les threads font partie de la planification de l'exécution et font référence au chemin d'exécution du processus, également appelé flux d'exécution du programme. Les threads sont parfois appelés processus légers.

Les threads sont un concept développé après des processus. Un thread est également appelé processus léger. Il s'agit d'une unité d'exécution de base du processeur et de la plus petite unité du processus d'exécution du programme. Elle est composée d'un ID de thread, d'un compteur de programme, d'un ensemble de registres et d'une pile. Un processus peut contenir plusieurs threads. L'avantage des threads est qu'ils réduisent la surcharge d'exécution simultanée des programmes et améliorent les performances de concurrence du système d'exploitation. L'inconvénient est que les threads ne disposent pas de leurs propres ressources système et ne disposent que de ressources essentielles pendant l'exécution. mais chaque thread du même processus Les threads peuvent partager les ressources système appartenant au processus. Si le processus est comparé à un atelier, alors les threads sont comme des travailleurs dans l'atelier. Cependant, il existe un mécanisme de verrouillage pour certaines ressources exclusives, et une mauvaise manipulation peut provoquer un « blocage ».
3. Qu'est-ce qu'une coroutine ?

Une coroutine est un thread léger en mode utilisateur, également appelé micro-thread. Le nom anglais est Coroutine. contrôlé par l'utilisateur. Les gens comparent généralement les

coroutines et les sous-programmes

(fonctions). Un appel de sous-programme a toujours une entrée et revient une fois. Une fois sorti, l'exécution du sous-programme est terminée. Le point de départ de la coroutine est le premier point d'entrée dans la coroutine, le point d'entrée suivant est après le point de retour. En python, les coroutines peuvent appeler d'autres coroutines via le rendement. La relation entre les coroutines qui transfèrent les droits d'exécution via la méthode de rendement n'est pas la relation entre l'appelant et l'appelé, mais est symétrique et égale l'une à l'autre, et ils travaillent ensemble pour accomplir la tâche grâce à une coopération mutuelle. Le processus général de son fonctionnement est le suivant :
Dans la première étape, la coroutine A commence à s'exécuter.
Dans la deuxième étape, la coroutine A est exécutée à mi-chemin et entre dans une pause. Le droit d'exécution est transféré à la coroutine B via la commande rendement.
La troisième étape : (après un certain temps) Coroutine B restitue les droits d'exécution.
La quatrième étape, la coroutine A reprend l'exécution.

La caractéristique de la coroutine est qu'elle est exécutée dans un seul thread. Par rapport au multi-threading, ses avantages se reflètent dans :

* L'

efficacité d'exécution de la coroutine est très élevée
. Étant donné que le changement de sous-programme n'est pas un changement de thread, mais est contrôlé par le programme lui-même, il n'y a pas de surcharge de changement de thread. Par rapport au multithread, plus le nombre de threads est grand, plus les avantages en termes de performances des coroutines sont évidents. * Les coroutines ne nécessitent pas de mécanismes de verrouillage multithread. Aucun verrouillage n'est requis pour contrôler les ressources partagées dans les coroutines, et seul l'état doit être déterminé. Conseils : le moyen le plus simple d'utiliser un processeur multicœur est multi-processus + coroutine, qui non seulement utilise pleinement le multicœur, mais donne également pleinement accès à la haute efficacité de la coroutine et peut obtenir des performances extrêmement élevées. .

4. La relation entre les processus et les threads

Un processus est comme un propriétaire, avec un terrain (ressources du système), et un thread est comme un locataire (thread, exécutant le processus d'agriculture). Chaque propriétaire (processus) n’a besoin que d’un seul locataire actif (thread).
Processus - la plus petite unité d'allocation de ressources, relativement robuste, les plantages n'affectent généralement pas les autres processus, mais le changement de processus consomme des ressources et est moins efficace.
Thread - la plus petite unité d'exécution du programme. Il n'y a pas d'espace d'adressage indépendant. Si un thread meurt, l'ensemble du processus peut mourir, mais il économise des ressources et a une efficacité de commutation élevée.

5. Processus et threads courants dans la programmation PHP

1. Dans les applications Web, nous créons un processus PHP à chaque fois que nous accédons à PHP, et bien sûr nous le ferons également. créer au moins un thread PHP.
2. PHP utilise pcntl pour la programmation multi-processus
3. PHP utilise pthreads pour la programmation multi-thread
4 de nginx pour chaque processus. n'a qu'un seul thread , et chaque thread peut gérer l'accès de plusieurs clients
5. php-fpm utilise le modèle multi-processus , chaque processus Il n'y a qu' un seul thread, et chaque thread ne peut gérer qu'un seul accès client .
6. Apache peut utiliser un modèle multi-processus ou un modèle multi-thread, selon le SAPI utilisé
7 Le processus est la plus petite unité d'allocation de ressources CPU, et le fil est La plus petite unité de planification du processeur

Recommandations associées :

Un résumé des questions techniques qui peuvent être posées lors des entretiens php


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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal