Processus : Au sens étroit, un processus est une instance d'un programme en cours d'exécution. Au sens large, un processus est un programme avec certaines fonctions indépendantes concernant. une certaine collecte de données. Exécutez l’activité une fois. (Apprentissage recommandé : Programmation PHP de l'entrée à la maîtrise)
C'est l'unité de base de l'exécution dynamique du système d'exploitation Dans les systèmes d'exploitation traditionnels, les processus sont à la fois l'unité d'allocation de base et l'unité d'allocation de base. unité d'exécution de base. (Résumé en quelques mots : actif, entité, programme en cours d'exécution) ;
Thread : est appelé un processus léger et est la plus petite unité du flux d'exécution d'un programme. L'entité est une unité de base qui est planifiée et distribuée indépendamment par le système.
Le thread lui-même ne possède fondamentalement pas de ressources système, il ne possède que certaines ressources essentielles au fonctionnement (comme un compteur de programme, un ensemble de registres et une pile), mais il peut être partagé avec d'autres threads appartenant au même processus Toutes les ressources appartenant au processus (résumées en quelques mots : poids léger, entité, processus, plus petite unité
Différence :
0) ; Processus C'est la plus petite unité d'allocation de ressources CPU, et le thread est la plus petite unité de planification CPU
1) En bref, un programme a au moins un processus et un processus a au moins un thread.
2) L'échelle de division des threads est plus petite que celle des processus, ce qui rend les programmes multithread hautement simultanés.
3) De plus, le processus dispose d'une unité de mémoire indépendante pendant l'exécution et plusieurs threads partagent la mémoire, améliorant ainsi considérablement l'efficacité d'exécution du programme.
4) Il existe des différences entre les threads et les processus lors de l'exécution. Chaque thread indépendant possède un point d'entrée pour l'exécution du programme, une séquence d'exécution séquentielle et un point de sortie pour le programme. Cependant, les threads ne peuvent pas s'exécuter indépendamment et doivent exister dans le programme d'application, et le programme d'application fournit un contrôle d'exécution de plusieurs threads.
5) D'un point de vue logique, la signification du multi-threading est que dans une application, plusieurs parties d'exécution peuvent être exécutées en même temps. Cependant, le système d'exploitation ne considère pas plusieurs threads comme plusieurs applications indépendantes pour mettre en œuvre la planification et la gestion des processus et l'allocation des ressources. C'est la différence importante entre les processus et les threads.
Divers modèles de concurrence de PHP
Puisqu'il existe deux modèles, lequel PHP utilise-t-il ?
La réponse est oui, ce qui signifie que PHP prend en charge le modèle multi-threading. Dans les situations multi-threading, les problèmes de partage et d'isolation des ressources doivent généralement être résolus. PHP lui-même est thread-safe. Plus précisément, le modèle dépend du SAPI utilisé. Par exemple, dans Apache, le modèle multi-thread ou le modèle multi-processus peut être utilisé. Et php-fpm utilise le modèle multi-processus.
La méthode actuellement recommandée est d'utiliser le modèle php-fpm, car ce modèle présente de nombreux avantages pour PHP :
1. La libération de mémoire est simple, utilisez Dans le. Dans le modèle multi-processus, les processus peuvent facilement libérer de la mémoire en quittant. Étant donné que PHP possède de nombreuses extensions, des fuites de mémoire peuvent se produire si vous ne faites pas attention, FPM résout le problème simplement en quittant le processus.
2. Forte capacité de récupération après sinistre. Pour le même problème, les extensions ou PHP peuvent provoquer des erreurs de segmentation. S'il s'agit d'un modèle multi-thread à processus unique, alors tout PHP se bloquera. Cela affectera le service. S'il existe plusieurs processus, même si un certain processus meurt, cela n'affectera pas le service global.
Les processus multiples présentent les avantages de plusieurs processus, et le multi-threading présente également les avantages du multi-threading. Par exemple, HHVM choisit un modèle multi-thread. Le plus grand avantage du modèle multithread est la commodité du partage d’informations et de la communication, car les pointeurs peuvent être utilisés directement dans le même espace de processus.
Par exemple, l'outil de cache d'opcode. En PHP, apc, opcache, etc. utilisez la mémoire partagée pour partager l'opcode. Ensuite, dans HHVM, il n'est pas nécessaire d'utiliser la mémoire partagée. avec mémoire partagée. Il n'est pas pratique de stocker des structures de données complexes en raison de problèmes de pointeur. Les structures de données en C/C++ peuvent être partagées dans des situations multithread. Ceci est également utile pour améliorer l’efficacité.
Il existe également une différence de modèle évidente entre le multi-traitement et le multi-thread : la logique lors du traitement des requêtes.
Dans le cas de multi-processus, il est difficile de transférer la connexion FD entre les processus. De nombreux processus utilisent généralement Listen() dans le processus parent, puis accept() dans chaque processus enfant pour réaliser l'équilibrage de charge. Il peut y avoir un problème de troupeau dans un tel modèle.
Dans le modèle multi-thread, un thread indépendant peut être utilisé pour accepter la demande, puis la distribuer à chaque thread de travail.
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!