Maison  >  Article  >  développement back-end  >  PHP implémente une programmation non bloquante et multithread

PHP implémente une programmation non bloquante et multithread

不言
不言original
2018-07-20 17:09:582341parcourir

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èle

Utiliser 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-thread

Installation é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()

Utilisez cURL

$cmh = curl_multi_init();

Utilisez l'extension Gearman/Swoole

Utilisez cache et file d'attente

redis

appelez la commande système

$cmd = 'nohup php ./processd.php $someVar >/dev/null &';

utilisez pcntl_fork( )

Prise en charge native de PHP

rendement

Recommandations associées :


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!

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