PHP多线程pthreads运用例子
发布时间:2022-02-23 15:47:32 所属栏目:PHP教程 来源:互联网
导读:php本身对于多线程处理是不够理想的,但如果我们使用pthreads性能会有所提高了,下面来看一个PHP多线程pthreads使用例子. ?php declare(ticks = 1); $running = 1; //信号处理函数 function sig_handler($signo) { switch ($signo) { case SIGINT: finish();
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 "启动线程$key/n"; } 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 "启动线程$key/n"; } } usleep(1000); }//Cuoxin.com function finish() { global $running; global $pool; $running = 0; echo "接收到信号,等待运行中线程结束/n"; foreach ($pool as $key=>$worker) { if ($pool[$key]->join()) { var_dump($pool[$key]->result); } } } ?> (编辑:91站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |