Maison > Article > développement back-end > PHP implémente une programmation non bloquante et multithread
Implémentation de la programmation multithread PHP et implémentation non bloquante. PHP ne prend pas en charge le multi-threading par défaut. Pour utiliser le multi-thread, vous devez installer l'extension pthread. Après l'installation, vous pouvez effectuer une programmation multi-thread.
Concept de thread
Le thread est la plus petite unité que le système d'exploitation peut planifier
Un programme multithread est plus susceptible d'être planifié par le système d'exploitation qu'un programme monothread Plus grand, donc les programmes multithreads sont généralement plus efficaces que les programmes monothreads
Plusieurs threads d'un programme multithread peuvent s'exécuter simultanément sur plusieurs cœurs d'un programme multicœur ; CPU, qui peut tirer pleinement parti de la machine multicœur ;
La surcharge du système liée à la création et au changement de threads est inférieure à celle des processus, elle est donc plus efficace que plusieurs processus dans une certaine mesure
Les threads partagent intrinsèquement l'espace mémoire et la communication entre les threads est plus simple. Évite l'introduction d'une nouvelle complexité par le processus IPC.Quand utiliser les threads
Le blocage des E/S amènera le système d'exploitation à planifier des tâches et à bloquer la tâche en cours, donc lorsqu'il y a beaucoup d'E/S dans le code, lors de l'utilisation du multi-threading, le code peut être paralléliséLe multi-threading peut utiliser pleinement le processeur, donc lorsqu'il y a plusieurs codes de calcul volumineux, vous pouvez également utiliser le multi-threading pour exécuter les en parallèleUtiliser le bon et le mauvais des threads
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 variables et variables statiques à 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. 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-threadInstallation étendue
PHP ne prend pas en charge plusieurs threads 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. sécurité des threads lors de la compilation de PHP../configure --enable-maintainer-zts --with-tsrm-pthreads
Instance
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); } } $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;
PHP non bloquant
Utiliser fastcgi_finish_request()echo "program start..."; fastcgi_finish_request(); sleep(1);echo 'debug1...'; sleep(10);echo 'debug2...';Utilisez fsockopen()
stream_set_blocking()
$cmh = curl_multi_init();
redis
$cmd = 'nohup php ./processd.php $someVar >/dev/null &';
rendement
extension multi-thread des threads d'installation php, multi-threads phpthreads
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!