美文网首页
swoole中的process基本认识

swoole中的process基本认识

作者: ysp123 | 来源:发表于2019-05-13 18:14 被阅读0次

pcntl_fork 与swoole中的process对比,请看PHP扛把子之一韩大牛的说明

废话不多说,先来个swoole基本的进程操作,直接代码:

$process = new swoole_process(function($worker){
        echo "子进程".$worker->pid;
});
$pid = $process->start();   //返回pid,和pcntl_fork()执行一样

进程的执行分为回调函数和匿名函数两种:

//回调函数
$process = new swoole_process('callBack_process');
$process->start();
function callBack_process($worker){
      echo "子进程执行".$worker->pid;
}

//匿名函数
$process = new swoole_process(function($worker){
        echo "子进程".$worker->pid;
});
$pid = $process->start();

swoole_process::wait():回收结束运行的子进程。通过设置参数true或false可以设置是否阻塞等待,默认为阻塞(true)

//以多进程执行为列
for($i=0,$workernum=4; $i<$workernum; $i++){
$process = new swoole_process('callBack_process');
$process->start();
}
function callBack_process($worker){
      echo "子进程执行".$worker->pid.PHP_EOL;
}
while(true){
      $res = swoole_process::wait();
       if($res){
            echo PHP_EOL;
            var_dump($res);
        }else{
            break;
      }
}

swoole_process::signal():设置异步信号监听。同步阻塞的程序可以使用pcntl扩展提供的pcntl_signal

for($i=0,$num=4;$i<$num;$i++){
      $process = new swoole_process(function($worker){
                  echo "子进程".$worker->pid;  
        });
    $process->start();
}
swoole_process::signal(SIGCHLD, function($sig){
          while(true){
                    $res = swoole_process::wait(false);
                    if($res){
                          var_dump($res);
                  }else{
                          break;
                  }
          }
});

swoole_process管道通信:

$url = [ 
    "www.baidu.com",
    "www.360.cn",
    "blog.diligentyang.com",
];
$result = []; 

for($i=0,$num=3;$i<$num;$i++){
      $process = new swoole_process(function($worker)use($i,$url){
            echo "子进程".$worker->pid;
            echo $worker->read().PHP_EOL;
            $res = curlTest($url[$i]);   //执行curl操作   
            $worker->write($res);   //向管道内写入数据
      });
      $pid = $process->start();
       $process->write('子进程执行 curl');
      $result[] = $process->read();   //读取管道数据
}

var_dump($result);

function curlTest($url){
          sleep(rand(5,10));
          return "执行curl".$url; 
}

while(true){
                    $res = swoole_process::wait(false);
                    if($res){
                          var_dump($res);
                  }else{
                          break;
                  }
  }

swoole_process队列:

$process = new swoole_process(function($worker){
    $data = $worker->pop();
    echo "读取队列".$data.PHP_EOL;
});
$process->useQueue();
$process->start();

$process->push('hello message!!');   //写入队列

while(true){
        $res = swoole_process::wait();
        if($res){
                var_dump($res);
        }else{
                break;
        }
}

以上就是swoole_process 的基本使用,本人才疏学浅,还望有人能多多拍砖。

相关文章

  • swoole中的process基本认识

    pcntl_fork 与swoole中的process对比,请看PHP扛把子之一韩大牛的说明 废话不多说,先来个s...

  • Swoole| Swoole 中 Process

    date: 2018-1-8 20:56:08title: Swoole| Swoole 中 Process 这篇...

  • swoole异步redis的使用

    (new \swoole_process(function ($process) use ($serv) { cl...

  • Swoole Process

    简介 基于C语言封装的进程管理模块,方便php的多进程编程 内置管道、消息队列接口,可方便实现进程间通信 自定义信号管理

  • Swoole Process进程初级

    Swoole 初级教程 1 . swoole 进程模块 process,模拟并发处理不同任务的案例直接上代码 启动...

  • swoole中进程

    swoole-1.7.2增加了一个进程管理模块,用来替代PHP的pcntl扩展。优点:swoole_process...

  • PHP swoole (3.多进程)

    文档: https://wiki.swoole.com/wiki/search/?q=process 关于进程...

  • 使用 swoole_process 实现 PHP 进程池

    swoole_process 主要是用来代替 PHP 的 pcntl 扩展。我们知道 pcntl 是用来进行多进程...

  • swoole--Process&&Event IO

    一。进程间通信方式-管道 1.管道是一组(2个)特殊的描述符2.管道需要在fork函数调用前创建3.如果某一端主动...

  • erlang最基本的单位process

    erlang最基本的单位process process 是erlang中最基本的单位,只有process才能获取c...

网友评论

      本文标题:swoole中的process基本认识

      本文链接:https://www.haomeiwen.com/subject/sbfzoqtx.html