教程集 www.jiaochengji.com
教程集 >  脚本编程  >  php  >  正文 PHP多线程pthreads使用例子

PHP多线程pthreads使用例子

发布时间:2016-10-08   编辑:jiaochengji.com
教程集为您提供PHP多线程pthreads使用例子等资源,欢迎您收藏本站,我们将为您提供最新的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 "启动线程$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);
}
 
function finish() {
  global $running;
  global $pool;
  $running = 0;
  echo "接收到信号,等待运行中线程结束\n";
  foreach ($pool as $key=>$worker) {
    if ($pool[$key]->join()) {
      var_dump($pool[$key]->result);
    }
  }
}

您可能感兴趣的文章:
PHP多线程pthreads使用例子
php单线程的缺点是什么?
php多线程thread开发与应用的例子
php进程还是线程
PHP多线程(pthreads)参数传递学习笔记
php多线程有用吗
php多进程几个例子
php不支持多线程怎么办
php多线程之管道通信的例子
PHP之pthread拓展使用以及坑

[关闭]
~ ~