Process\Pool
最后更新于:2022-04-02 06:35:54
# Process\\Pool
[TOC]
进程池,基于`Server`的`Manager`模块实现。可管理多个工作进程。该模块的核心功能为**进程管理**,相比`Process`实现多进程,`Process\Pool`更加简单,封装层次更高,开发者无需编写过多代码即可实现进程管理功能。
> 此特性需要`2.1.2`或更高版本
## 常量定义
* `SWOOLE_IPC_MSGQUEUE`:系统消息队列通信
* `SWOOLE_IPC_SOCKET`:`SOCKET`通信
## 异步支持
* 可在`onWorkerStart`中使用`Swoole`提供的异步或协程`API`,工作进程即可实现异步
* 底层自带的消息队列和`SOCKET`通信均为同步阻塞`IO`
* 如果进程为异步模式,请勿使用任何自带的同步`IPC`进程通信功能 (无法使用message回调)
> 低于`4.0`版本需要在`onWorkerStart`末尾添加`swoole_event_wait`进入事件循环
## 使用实例
~~~
$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) {
$msgs = $redis->brpop($key, 2);
if ( $msgs == null) continue;
var_dump($msgs);
}
});
$pool->on("WorkerStop", function ($pool, $workerId) {
echo "Worker#{$workerId} is stopped\n";
});
$pool->start();
~~~
';