Home >Backend Development >PHP Tutorial >pthread implements multi-threaded query_PHP tutorial
Introduction: The performance bottleneck of most websites is not on the PHP server, because it can be easily dealt with by simply increasing the number of servers or CPU cores horizontally (for various cloud hosts, it is more convenient to increase the number of VPS or CPU cores, and directly use backup The mirror adds VPS, and there is no need to install and configure the operating system and environment), but lies in the MySQL database. If you use a NoSQL database, it may take ten queries to process the same business logic. At this time, the role of PHP multi-threading is very obvious. It can execute NoSQL queries at the same time, greatly improving efficiency.
PHP 5.3 and above, using the pthreads PHP extension, can make PHP truly support multi-threading. Multi-threading can greatly shorten program execution time when processing repetitive cyclic tasks.
PHP extension download: https://github.com/krakjoe/pthreads
PHP manual document: http://php.net/manual/zh/book.pthreads.php
1. Extended compilation and installation (Linux), the editing parameter --enable-maintainer-zts is a required option:
Added:
2. Give a PHP multi-threading and For loop to capture the PHP code example of Baidu search page:
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)."n"; $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)."n"; ?>