Cet article présente principalement la méthode d'utilisation de pthreads pour obtenir un véritable multi-threading PHP. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer
PHP 5.3 ou supérieur. . Grâce à l'extension PHP pthreads, PHP peut véritablement prendre en charge le multi-threading. Le multithreading peut réduire considérablement le temps d'exécution du programme lors du traitement de tâches répétitives en boucle
J'ai dit dans mon article précédent que le goulot d'étranglement des performances de la plupart des sites Web ne réside pas sur le serveur PHP, car il peut simplement augmenter le serveur horizontalement. nombre de cœurs de processeur pour y faire face facilement (pour différents hôtes cloud, il est plus pratique d'augmenter le VPS ou le nombre de cœurs de processeur. Vous pouvez ajouter un VPS directement avec l'image de sauvegarde, sans même installer et configurer le système d'exploitation et l'environnement ). Au lieu de cela, il réside dans la base de données MySQL.
Si vous utilisez une base de données MySQL et une requête SQL conjointe, vous pourrez peut-être gérer la logique métier. Cependant, si vous rencontrez un grand nombre de requêtes simultanées, vous cesserez de travailler.
Si vous utilisez une base de données NoSQL, dix requêtes peuvent être nécessaires pour traiter la même logique métier, mais chaque requête est plus rapide que MySQL. Dix boucles de requêtes NoSQL peuvent être plus rapides qu'une requête conjointe MySQL. de requêtes/seconde ne posent aucun problème.
Si vous ajoutez le multi-threading PHP, interrogez NoSQL via dix threads en même temps et renvoyez la sortie récapitulative des résultats, la vitesse sera plus rapide. Dans notre produit APP actuel, nous appelons une interface PHP qui recommande des produits en temps réel en fonction des préférences de l'utilisateur. PHP doit lancer 500 à 1 000 requêtes dans la base de données BigSea NoSQL pour calculer les préférences personnalisées de l'utilisateur en temps réel. Le multithreading PHP est très évident.
Téléchargement de l'extension PHP : https://github.com/krakjoe/pthreads
Document du manuel PHP : http://php.net/manual/zh/book .pthreads.php
1. Compilation et installation étendues (Linux), le paramètre de compilation --enable-maintainer-zts est une option obligatoire :
cd /Data/tgz/php-5.5.1 ./configure --prefix=/Data/apps/php --with-config-file-path=/Data/apps/php/etc --with-mysql=/Data/apps/mysql --with-mysqli=/Data/apps/mysql/bin/mysql_config --with-iconv-dir --with-freetype-dir=/Data/apps/libs --with-jpeg-dir=/Data/apps/libs --with-png-dir=/Data/apps/libs --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt=/Data/apps/libs --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --enable-opcache --with-pdo-mysql --enable-maintainer-zts make clean make make install unzip pthreads-master.zip cd pthreads-master /Data/apps/php/bin/phpize ./configure --with-php-config=/Data/apps/php/bin/php-config make make install
Ajouter dans php.ini :
vi /Data/apps/php/etc/php.ini extension = "pthreads.so"
Donne un multi-threading PHP et une boucle For pour capturer l'exemple de code PHP de la page de recherche Baidu :
<?php class test_thread_run extends Thread { public $url; public $data; public function __construct($url) { $this->url = $url; } public function run() { if(($url = $this->url)) { $this->data = model_http_curl_get($url); } } } function model_thread_result_get($urls_array) { foreach ($urls_array as $key => $value) { $thread_array[$key] = new test_thread_run($value["url"]); $thread_array[$key]->start(); } foreach ($thread_array as $thread_array_key => $thread_array_value) { while($thread_array[$thread_array_key]->isRunning()) { usleep(10); } if($thread_array[$thread_array_key]->join()) { $variable_data[$thread_array_key] = $thread_array[$thread_array_key]->data; } } return $variable_data; } function model_http_curl_get($url,$userAgent="") { $userAgent = $userAgent ? $userAgent : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_TIMEOUT, 5); curl_setopt($curl, CURLOPT_USERAGENT, $userAgent); $result = curl_exec($curl); curl_close($curl); return $result; } for ($i=0; $i < 100; $i++) { $urls_array[] = array("name" => "baidu", "url" => "http://www.baidu.com/s?wd=".mt_rand(10000,20000)); } $t = microtime(true); $result = model_thread_result_get($urls_array); $e = microtime(true); echo "多线程:".($e-$t)." "; $t = microtime(true); foreach ($urls_array as $key => $value) { $result_new[$key] = model_http_curl_get($value["url"]); } $e = microtime(true); echo "For循环:".($e-$t)." "; ?>
Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
Recommandations associées :
Comment résoudre le problème des caractères tronqués lors de l'importation de fichiers csv en php
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!