您好,欢迎访问一九零五行业门户网

PHP多线程pthreads使用例子

php本身对于多线程处理是不够理想的,但如果我们使用pthreads性能会有所提高了,下面来看一个php多线程pthreads使用例子
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   $urls[] = 'http://www.baidu.com/s?wd='. rand(10000, 20000);
}
$pool = array();
for ($i=1;$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);
    }
  }
}
其它类似信息

推荐信息