多进程使用

怎么才能在一个php脚本中,开启多进程处理呢?这里我们可以使用2种方法(注意,本教程只适用于linux,php-cli环境)

pcntl扩展

pcntl是php官方的多进程扩展,只能在linux环境使用,例如:

  1. <?php
  2. $num=1;
  3. $str="EasySwoole,Easy学swoole\n";
  4. $pid = pcntl_fork();//新开一个子进程,上面的变量内存将会复制一份到子进程中.这个函数,在主进程中返回子进程进程id,在子进程返回0,开启失败在主进程返回-1
  5. echo $str;//这下面的代码,将会被主进程,子进程共同执行
  6. if($pid>0){//主进程代码
  7. echo "我是主进程,子进程的pid是{$pid}\n";
  8. }elseif($pid==0){
  9. echo "我是子进程,我的pid是".getmypid()."\n";
  10. }else{
  11. echo "我是主进程,我现在慌得一批,开启子进程失败了\n";
  12. }

详细内容可自行搜索了解

swoole扩展

swoole扩展是面向生产环境的 PHP 异步网络通信引擎,它也有着进程管理模块

  1. <?php
  2. $num = 1;
  3. $str = "EasySwoole,Easy学swoole\n";
  4. $process = new swoole_process(function () use ($str) {//实例化一个进程类,传入回调函数
  5. echo $str;//变量内存照常复制一份,只不过swoole的开启子进程后使用的是回调方法运行
  6. echo "我是子进程,我的pid是" . getmypid() . "\n";
  7. });
  8. $pid = $process->start();//开启子进程,创建成功返回子进程的PID,创建失败返回false。
  9. echo $str;
  10. if ($pid > 0) {//主进程代码
  11. echo "我是主进程,子进程的pid是{$pid}\n";
  12. }else{
  13. echo "我是主进程,我现在不慌了,失败就失败吧\n";
  14. }

详细内容可自行搜索了解