Swoole从入门到入土(23)——多进程[进程池Process\Pool]

Swoole的ProcessPool提供了一种简单高效的方式管理多进程,支持协程和不同IPC模式。它能自动补充退出的工作进程,并通过事件回调如WorkerStart和WorkerStop进行进程生命周期管理。使用协程时,推荐使用UNIXSOCK进行进程间通信。进程池可用于创建利用多核CPU的服务器程序。

        Swoole提供的进程池为Process\Pool,基于 Swoole\Server 的 Manager 管理进程模块实现。可管理多个工作进程。该模块的核心功能为进程管理,相比 Process 实现多进程,Process\Pool 更加简单,封装层次更高,开发者无需编写过多代码即可实现进程管理功能,配合 Co\Server 可以创建纯协程风格的,能利用多核 CPU 的服务端程序。同样,我们同过一段代码引出本节的详细讨论:

$workerNum = 10;
$pool = new Swoole\Process\Pool($workerNum);

$pool->on("WorkerStart", function ($pool, $workerId) {
    echo "Worker#{$workerId} is started\n";
    $redis = new Redis();
    $redis->pconnect('127.0.0.1', 6379);
    $key = "key1";
    while (true) {
         $msg = $redis->brpop($key, 2);
         if ( $msg == null) continue;
         var_dump($msg);
     }
});

$pool->on("WorkerStop", function ($pool, $workerId) {
    echo "Worker#{$workerId} is stopped\n";
});

$pool->start();

现在让我们一起了解,这个类为我们提供了哪些成员。

常量

成员函数

1) __construct():构造方法

Swoole\Process\Pool::__construct(int $worker_num, int $ipc_type = 0, int $msgqueue_key = 0, bool $enable_coroutine = false);

$worker_num:工作进程的数量(当一个进程退出后,Pool会及时拉取另一个进程进行补充)

$ipc_type:进程间通信的模式【默认为 0 表示不使用任何进程间通信特性】,这个参数需要注意如下事项:

                   - 设置为 0 时必须设置 onWorkerStart 回调,并且必须在 onWorkerStart 中实现循环逻辑,当 onWorkerStart 函数退出时工作进程会立即退出,之后会由 Manager 进程重新拉起进程;

                   - 设置为 SWOOLE_IP

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值