swoole的process模块创建和使用子进程

106 阅读1分钟

swoole中为我们提供了一个进程管理模块 Process,替换PHP的 pcntl 扩展,方便我们创建进程,管理进程,和进程间的通信。

swoole提供了2种进程间的通信:

1、基于 unix socket 的管道 pipe。

2、基于 sysvmsg 的消息队列。

我们可以通过 new swoole_process() 快速的创建一个进程,默认会创建一个 SOCK_DGRAM 类型的管道,用于进程间的通信,当然可以设置成其他类型,也可以不创建。

一、通过同步阻塞管道进行进程间通信

<?php
 
$worker_process_nums = 5;
$worker_process = [];
 
for ($i = 0; $i < $worker_process_nums; $i++) {
    //创建子进程
    //默认为每个子进程创建一个管道,如果不想创建设置$pipe_type参数为false
    //注意管道默认是同步阻塞,半双工,如果读取不到数据就会阻塞
    $worker = new swoole_process(function (swoole_process $worker) {
        //注意,如果主进程中不写数据write(),那么子进程这里read()就会阻塞
        $task = json_decode($worker->read(), true);
 
        //进行计算任务
        $tmp = 0;
        for ($i = $task['start']; $i < $task['end']; $i++) {
            $tmp += $i;
        }
 
        echo