Maison  >  Article  >  développement back-end  >  PHP prend-il en charge le multithreading ?

PHP prend-il en charge le multithreading ?

(*-*)浩
(*-*)浩original
2019-09-12 09:12:022619parcourir

PHP ne prend pas en charge le multi-threading par défaut. Pour utiliser le multi-threading, vous devez installer l'extension pthread, vous devez utiliser le paramètre --enable-maintainer-zts pour recompiler. PHP. Ce paramètre est spécifié lors de la compilation de PHP. Utiliser la sécurité des threads.

PHP prend-il en charge le multithreading ?

Sécurité des threads

Le multi-threading est un facteur qui rend le programme mal à l'aise, avant d'utiliser le multi-threading, tout d'abord, nous devons considérer les problèmes de sécurité des threads : (Apprentissage recommandé : Programmation PHP de l'entrée à la maîtrise)

Sécurité des threads : La sécurité des threads est un terme en programmation, qui fait référence à l'utilisation d'une certaine fonction ou bibliothèque de fonctions dans Lorsqu'il est appelé dans un environnement multithread, il peut gérer correctement les variables partagées entre plusieurs threads afin que les fonctions du programme puissent être exécutées correctement.

En multi-threading traditionnel, puisque plusieurs threads partagent des variables, les problèmes suivants peuvent survenir :

Il existe un tableau global $arr = array('a');;

Un thread obtient la longueur du tableau est de 1 ;

Le thread B obtient la longueur du tableau est de 1 ;

Un thread fait apparaître l'élément du tableau $a = array_pop($arr $a); = 'a';;

Le fil B fait également apparaître les éléments du tableau $b = array_pop($arr); $a = null;;

À ce moment, un événement surnaturel s'est produit dans le fil B , évidemment La longueur du tableau est supérieure à 0, ou rien ne sort ;

Implémentation PHP

La sécurité des threads implémentée par PHP utilise principalement le mécanisme TSRM pour isoler les variables globales et les variables statiques. , copiez les variables globales et les variables statiques dans chaque thread, et chaque thread utilise une sauvegarde du thread principal, évitant ainsi les conflits de variables et les problèmes de sécurité des threads.

L'encapsulation multithread de PHP garantit la sécurité des threads. Les programmeurs n'ont plus besoin d'envisager d'ajouter divers verrous aux variables globales pour éviter les conflits de lecture et d'écriture. Cela réduit également le risque d'erreurs et rend le code écrit plus sécurisé.

Mais le résultat est qu'une fois que le sous-thread commence à s'exécuter, le thread principal ne peut plus ajuster les détails d'exécution du sous-thread, et le thread perd la capacité de transmettre des messages entre les threads via des variables globales pour une certaine mesure.

Dans le même temps, une fois que PHP a activé l'option de sécurité des threads, il y aura des pertes supplémentaires lors de l'utilisation du mécanisme TSRM pour allouer et utiliser des variables. Par conséquent, dans un environnement PHP qui ne nécessite pas de multi-threading, utilisez la version ZTS (non-thread safety) de PHP Très bien.

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