当前位置:首页 > PHP教程 > php高级应用 > 列表

php swoole多进程/多线程用法示例【基于php7nts版】

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-10 16:48:52 浏览: 评论:0 

本文实例讲述了php swoole多进程/多线程用法,分享给大家供大家参考,具体如下:

swoole的多线程其实就是多进程,进程创建太多切换的开销很大,如果能用上pthreads建议用pthreads,因为我用的是php7nts版本没办法用pthreads

swoole实例如下:

  1. <?php 
  2. /** 
  3.  * 创建多进程 
  4.  */ 
  5. $worker_num     = 6;    // 默认进程数 
  6. $workers       = [];    // 进程保存 
  7. $redirect_stdout  = false;  // 重定向输出 ; 这个参数用途等会我们看效果 
  8. for($i = 0; $i < $worker_num$i++){ 
  9.   $process = new swoole_process('callback_function'$redirect_stdout); 
  10.   // 启用消息队列 int $msgkey = 0, int $mode = 2 
  11.   $process->useQueue(0, 2); 
  12.   $pid = $process->start(); 
  13.   // 管道写入内容 
  14.   $process->write('index:'.$i); 
  15.   $process->push('进程的消息队列内容'); 
  16.   // 将每一个进程的句柄存起来 
  17.   $workers[$pid] = $process
  18. /** 
  19.  * 子进程回调 
  20.  * @param swoole_process $worker [description] 
  21.  * @return [type]         [description] 
  22.  */ 
  23. function callback_function(swoole_process $worker
  24.   $recv = $worker->pop(); 
  25.   echo "子输出主内容: {$recv}".PHP_EOL; 
  26.   //get guandao content 
  27.   $recv = $worker->read(); 
  28.   $result = doTask(); 
  29.   echo PHP_EOL.$result.'==='.$worker->pid.'==='.$recv
  30.   $worker->exit(0); 
  31. /** 
  32.  * 监控/回收子进程 
  33.  */ 
  34. while(1){ 
  35.   $ret = swoole_process::wait(); 
  36.   if ($ret){// $ret 是个数组 code是进程退出状态码, 
  37.     $pid = $ret['pid']; 
  38.     echo PHP_EOL."Worker Exit, PID=" . $pid . PHP_EOL; 
  39.   }else
  40.     break
  41.   } 
  42. /** 
  43.  * doTask 
  44.  * @return [type] [description] 
  45.  */ 
  46. function doTask() 
  47.   sleep(2); 
  48.   return true; 
  49. }

Tags: swoole多进程 php多线程 php7nts

分享到: