Maison > Article > développement back-end > Que dois-je faire si PHP ne prend pas en charge le multi-threading ?
PHP ne prend pas en charge le multi-threading par défaut. Pour utiliser le multi-threading, vous devez installer l'extension pthread. Pour installer l'extension pthread, vous devez utiliser l'option --enable-. Paramètre mainteneur-zts pour recompiler PHP. Ce paramètre spécifie la méthode thread-safe à utiliser lors de la compilation de PHP.
Recommandé : serveur php
Sécurité des threads
Le multi-threading est un facteur qui rend le programme mal à l'aise. Avant d'utiliser le multi-threading, commencez par Thread. les problèmes de sécurité doivent être pris en compte :
Sécurité des threads : La sécurité des threads est un terme en programmation, ce qui signifie que lorsqu'une fonction ou une bibliothèque de fonctions est appelée dans un environnement multithread, elle peut gérer correctement le partage entre plusieurs threads. variables 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 les éléments du tableau $a = array_pop($arr); $a = 'a';;
Le thread B fait également apparaître les éléments du tableau $b = array_pop ($arr); $a = null;;
À ce moment-là, un événement surnaturel s'est produit dans le thread B. La longueur du tableau était évidemment supérieure à 0, ou rien n'a été sauté ;
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, et copie les variables globales et les variables statiques dans chaque thread. Une copie, 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.
Classes et méthodes
PHP encapsule les threads dans la classe Thread. La création de threads est réalisée en instanciant un objet thread. En raison de l'encapsulation de la classe, les variables ne peuvent être utilisées que via le constructeur. Transmettez-le et les résultats de l'opération de thread doivent également être transmis via des variables de classe.
Ce qui suit présente plusieurs méthodes de classe Thread couramment utilisées :
run() : Cette méthode est une méthode abstraite, chaque thread doit implémenter cette méthode et le thread démarre Après l'exécution, le code de cette méthode sera exécuté automatiquement ;
start() : appelez cette méthode dans le thread principal pour démarrer l'exécution d'un thread
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!