加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP多线程pthreads使用案例

发布时间:2023-09-15 11:00:26 所属栏目:PHP教程 来源:
导读:php本身对于多线程处理是不够理想的,但如果我们使用pthreads性能会有所提高了,下面来看一个PHP多线程pthreads使用例子.

<?php
declare(ticks = 1);
$running = 1;

//信号处理函数
function sig_hand
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); 
    } 
  } 

?>
 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章