Maison >développement back-end >Problème PHP >PHP est-il multithread ou monothread ?

PHP est-il multithread ou monothread ?

(*-*)浩
(*-*)浩original
2019-09-18 11:42:585946parcourir

Depuis le début de la conception de PHP jusqu'à sa popularité, il n'y a pas eu de besoin évident d'utiliser le multi-threading pour le résoudre.

PHP est-il multithread ou monothread ?

Il existe également des solutions et alternatives correspondantes lorsque le multithreading est requis. Le multithreading n'est pas toujours meilleur que le monothreading. Le multithreading peut introduire d'autres problèmes (par exemple, un blocage peut survenir lorsque deux threads appellent la même méthode dans une classe en même temps). (Apprentissage recommandé : Programmation PHP de l'entrée à la maîtrise)

Vous pouvez comprendre que le PHP correspondant à une demande de page d'un client est traité dans un seul thread, afin qu'il puisse être traité de haut en bas L'étape suivante consiste à modifier/comprendre la logique métier dans le code, mais PHP peut ouvrir plusieurs threads en même temps pour gérer le même PHP demandé par de nombreux utilisateurs, donc PHP peut également être considéré comme "multi-thread". ".

L'exécution de chaque fichier PHP est monothread, cependant, le serveur (apache/nigix/php-fpm) est multi-thread. Chaque fois qu'un certain fichier PHP est accédé par le serveur, un nouveau processus/thread sera créé pour exécuter le fichier PHP correspondant.

C'est-à-dire que PHP est monothread pour une requête, mais plusieurs requêtes sont simultanées.

En fait, généralement lors de l'écriture de programmes PHP, il est considéré comme monothread. La relation entre plusieurs requêtes est que parfois la lecture et l'écriture de bases de données, de fichiers, de sessions, etc. seront verrouillées, ce qui entraînera le blocage des requêtes suivantes et l'attente de la fin de la requête précédente avant de continuer.

Quant à la coroutine, on ne peut dire qu'il s'agit d'un nouveau processus d'exécution de programme (l'ancien est séquence, jugement, boucle), qui est essentiellement monothread

Donc pour être précis, PHP est monothread, et dans une certaine mesure il peut aussi être considéré comme « multi-thread » ! ! !

Multi-threading PHP

Par défaut, PHP ne prend pas en charge le multi-threading. Pour utiliser le multi-threading, vous devez actuellement installer une extension. , les extensions couramment utilisées incluent pcnlt , POSIX, pthreads, mais la plus utilisée est l'extension pthreads. Elle utilise des paramètres pour spécifier la méthode thread-safe lors de la compilation de PHP, afin qu'elle prenne en charge le multi-threading

Avant d'utiliser. threads, vous devez d'abord considérer les problèmes de sécurité des threads, la sécurité des threads signifie que lorsqu'une fonction ou une bibliothèque de fonctions est appelée dans un environnement multithread, elle peut gérer correctement les variables partagées entre plusieurs threads, afin que la fonction du programme puisse être terminé correctement

PHP assure la sécurité des threads

PHP atteint la sécurité des threads principalement grâce au mécanisme TSRM. Grâce à ce mécanisme, les variables globales et les variables statiques peuvent être isolées et une copie. des variables globales et des variables statiques sont copiées dans chaque variable de thread. Chaque thread utilise une sauvegarde du thread principal. Cela évite les conflits de variables et ne provoque pas de problèmes de sécurité des threads.

L'encapsulation du multithreading par PHP garantit la sécurité des threads, de sorte que les développeurs n'ont pas besoin de prendre en compte les conflits de lecture et d'écriture, ce qui rend le code plus sûr. Cependant, cela présente des inconvénients. Par exemple, lorsque le sous-thread commence à s'exécuter, le thread principal ne peut plus ajuster les détails d'exécution du sous-thread et perd la capacité de transmettre des messages

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:
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