PHP多线程pthreads使用例子
php本身对于多线程处理是不够理想的,但如果我们使用pthreads性能会有所提高了,下面来看一个PHP多线程pthreads使用例子
<?php declare(ticks = 1); $running = 1; //信号处理函数 function sig_handler($signo) { switch ($signo) { case SIGINT: finish(); break; default: break; } } pcntl_signal(SIGINT, "sig_handler"); class test extends Thread { public $url; public $result; public function __construct($url) { $this->url = $url; } public function run() { if ($this->url) { $this->result = model_http_curl_get($this->url); } } } function model_http_curl_get($url) { $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, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)'); $result = curl_exec($curl); curl_close($curl); return $result; } for ($i = 0; $i < 500; $i++) { $urls[] = 'http://www.baidu.com/s?wd=' . rand(10000, 20000); } $pool = array(); for ($i = 1; $i <= 5; $i++) { $key = uniqid(); $url = array_shift($urls); $pool[$key] = new test($url); $pool[$key]->start(); echo "启动线程$keyn"; } while ($urls && $running) { foreach ($pool as $key => $worker) { if (!$worker->isRunning()) { //unset($pool[$key]); echo "线程" . $key . "已结束n"; $url = array_shift($urls); $pool[$key] = new test($url); $pool[$key]->start(); echo "启动线程$keyn"; } } usleep(1000); } function finish() { global $running; global $pool; $running = 0; echo "接收到信号,等待运行中线程结束n"; foreach ($pool as $key => $worker) { if ($pool[$key]->join()) { var_dump($pool[$key]->result); } } }
文章链接:http://www.phprm.com/code/85672.html
随便收藏,请保留本文地址!