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.
Implémentation PHP
La sécurité des threads de l'implémentation PHP utilise principalement le mécanisme TSRM pour protéger les variables globales et statique Les variables sont isolées et les variables globales et statiques sont copiées dans chaque thread. Chaque thread utilise une sauvegarde du thread principal, évitant ainsi les conflits de variables et les problèmes de sécurité des threads. (Apprentissage recommandé : Tutoriel vidéo PHP)
L'encapsulation du multithreading par PHP garantit la sécurité des threads. Les programmeurs n'ont pas besoin d'envisager l'ajout de divers verrous aux variables globales pour éviter les conflits de lecture et d'écriture. en même temps, cela réduit également les risques d’erreurs et le code écrit est plus sûr.
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.
Exemple de code
Ce qui suit est une classe de thread utilisée pour demander une certaine interface. Ensuite, écrivez deux exemples d'applications multithread basés sur celui-ci :
class Request extends Thread { public $url; public $response; public function __construct($url) { $this->url = $url; } public function run() { $this->response = file_get_contents($this->url); } }
Requête asynchrone
Divisez la requête synchrone en plusieurs threads et appels asynchrones pour améliorer l'efficacité de fonctionnement du programme. .
$chG = new Request("www.google.com"); $chB = new Request("www.baidu.com"); $chG ->start(); $chB ->start(); $chG->join(); $chB->join(); $gl = $chG->response; $bd = $chB->response;
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!