J'ai vu différents binaires pour PHP, comme non-thread ou thread-safe?
Qu'est-ce que ça veut dire?
Quelle est la différence entre ces packages?
J'ai vu différents binaires pour PHP, comme non-thread ou thread-safe?
Qu'est-ce que ça veut dire?
Quelle est la différence entre ces packages?
Réponses:
Contexte nécessaire sur les approches de concurrence:
Différents serveurs Web mettent en œuvre différentes techniques pour gérer les demandes HTTP entrantes en parallèle. Une technique assez populaire utilise des threads - c'est-à-dire que le serveur Web créera / dédiera un seul thread pour chaque demande entrante. Le serveur Web Apache HTTP prend en charge plusieurs modèles de gestion des demandes, dont l'un (appelé MPM de travail) utilise des threads. Mais il prend en charge un autre modèle de concurrence appelé le MPM préfork qui utilise des processus - c'est-à-dire que le serveur Web créera / dédiera un seul processus pour chaque demande.
Il existe également d'autres modèles de concurrence d'accès complètement différents (utilisant des sockets asynchrones et des E / S), ainsi que des modèles qui mélangent deux, voire trois modèles. Dans le but de répondre à cette question, nous ne nous intéressons qu'aux deux modèles ci-dessus, et en prenant le serveur Apache HTTP comme exemple.
Contexte nécessaire sur la façon dont PHP "s'intègre" aux serveurs Web:
PHP lui-même ne répond pas aux requêtes HTTP réelles - c'est le travail du serveur Web. Nous configurons donc le serveur Web pour transmettre les requêtes à PHP pour traitement, puis recevons le résultat et le renvoyons à l'utilisateur. Il existe plusieurs façons de chaîner le serveur Web avec PHP. Pour Apache HTTP Server, le plus populaire est "mod_php". Ce module est en fait PHP lui-même, mais compilé en tant que module pour le serveur Web, il est donc chargé directement à l'intérieur.
Il existe d'autres méthodes pour chaîner PHP avec Apache et d'autres serveurs Web, mais mod_php est la plus populaire et servira également à répondre à votre question.
Vous n'avez peut-être pas eu besoin de comprendre ces détails auparavant, car les sociétés d'hébergement et les distributions GNU / Linux sont livrées avec tout ce qui est préparé pour nous.
Maintenant, à votre question!
Comme avec mod_php, PHP est chargé directement dans Apache, si Apache va gérer la concurrence en utilisant son Worker MPM (c'est-à-dire, en utilisant Threads), alors PHP doit pouvoir fonctionner dans ce même environnement multi-thread - ce qui signifie que PHP doit être thread-safe pour pouvoir jouer correctement avec Apache!
À ce stade, vous devriez penser "OK, donc si j'utilise un serveur Web multithread et que je vais intégrer PHP directement dedans, alors je dois utiliser la version thread-safe de PHP". Et ce serait une pensée correcte. Cependant, il se trouve que la sécurité des threads de PHP est très contestée . C'est un terrain à utiliser si vous savez vraiment ce que vous faites.
Notes finales
Au cas où vous vous poseriez la question, mon conseil personnel serait de ne pas utiliser PHP dans un environnement multi-thread si vous avez le choix!
En parlant uniquement des environnements basés sur Unix, je dirais que, heureusement, vous ne devez y penser que si vous allez utiliser PHP avec le serveur Web Apache, auquel cas il est conseillé d'utiliser le MPM préfork d'Apache (qui n'utilise pas de threads, et par conséquent, la sécurité des threads PHP n'a pas d'importance) et toutes les distributions GNU / Linux que je connais prendront cette décision pour vous lorsque vous installerez Apache + PHP via leur système de package, sans même vous le demander pour un choix. Si vous comptez utiliser d'autres serveurs Web tels que nginx ou lighttpd , vous n'aurez de toute façon pas la possibilité d'y intégrer PHP. Vous envisagerez d'utiliser FastCGI ou quelque chose d'égal qui fonctionne dans un modèle différent où PHP est totalement extérieurdu serveur Web avec plusieurs processus PHP utilisés pour répondre aux demandes via par exemple FastCGI. Dans de tels cas, la sécurité des threads n'a pas d'importance non plus. Pour voir quelle version votre site Web utilise, placez un fichier contenant
<?php phpinfo(); ?>
sur votre site et recherchez l'Server API
entrée. Cela pourrait dire quelque chose commeCGI/FastCGI
ouApache 2.0 Handler
.Si vous regardez également la version en ligne de commande de PHP, la sécurité des threads n'a pas d'importance.
Enfin, si la sécurité des threads n'a pas d'importance, quelle version devez-vous utiliser - la thread-safe ou la non-thread-safe? Franchement, je n'ai pas de réponse scientifique! Mais je suppose que la version non thread-safe est plus rapide et / ou moins boguée, sinon ils auraient juste proposé la version thread-safe et ne se seraient pas donné la peine de nous donner le choix!
la source
Pour moi, je choisis toujours une version non thread-safe car j'utilise toujours nginx, ou j'exécute PHP à partir de la ligne de commande.
La version non thread-safe doit être utilisée si vous installez PHP en tant que binaire CGI, interface de ligne de commande ou autre environnement où un seul thread est utilisé.
Une version thread-safe doit être utilisée si vous installez PHP en tant que module Apache dans un MPM de travail (modèle multi-traitement) ou un autre environnement où plusieurs threads PHP s'exécutent simultanément.
la source
Apache MPM prefork avec modphp est utilisé car il est facile à configurer / installer. En termes de performances, il est assez inefficace. Ma façon préférée de faire la pile, FastCGI / PHP-FPM. De cette façon, vous pouvez utiliser le MPM Worker beaucoup plus rapide. Le PHP entier reste non threadé, mais Apache sert le thread (comme il se doit).
Donc, fondamentalement, de bas en haut
Linux
Apache + MPM Worker + ModFastCGI (NOT FCGI) | (ou) | Cherokee | (ou) | Nginx
PHP-FPM + APC
ModFCGI ne prend pas correctement en charge PHP-FPM, ni aucune application FastCGI externe. Il prend uniquement en charge les scripts FastCGI non gérés par le processus. PHP-FPM est le gestionnaire de processus PHP FastCGI.
la source
Selon la documentation PHP ,
Que signifie la sécurité des threads lors du téléchargement de PHP?
Les bibliothèques suivantes ne sont pas thread-safe. Ils ne sont pas recommandés pour une utilisation dans un environnement multi-thread.
la source