Process\Pool::__construct
最后更新于:2022-04-02 06:35:57
# Process\\Pool::\_\_construct
[TOC]
创建进程池。函数原型:
~~~
function Process\Pool::__construct(int $worker_num, int $ipc_type = 0, int $msgqueue_key = 0);
~~~
## 参数
* `$worker_num`:指定工作进程的数量
* `$ipc_type`进程间通信的模式,默认为`0`表示不使用任何进程间通信特性
* 设置为`0`时必须设置`onWorkerStart`回调,并且必须在`onWorkerStart`中实现循环逻辑,当`onWorkerStart`函数退出时工作进程会立即退出
* 设置为`SWOOLE_IPC_MSGQUEUE`表示使用系统消息队列通信,可设置`$msgqueue_key`指定消息队列的`KEY`,未设置消息队列`KEY`,将申请私有队列
* 设置为`SWOOLE_IPC_SOCKET`表示使用`Socket`进行通信,需要使用`listen`方法指定监听的地址和端口
* 使用非`0`设置时,必须设置`onMessage`回调,`onWorkerStart`变更为可选
## 消息队列
在使用`SWOOLE_IPC_MSGQUEUE`时可使用`sysvmsg`扩展提供的消息队列`API`向工作进程投递人任务。
~~~
$q = msg_get_queue($key);
foreach (range(1, 100) as $i) {
$data = json_encode(['data' => base64_encode(random_bytes(1024)), 'id' => uniqid(), 'index' => $i,]);
msg_send($q, $i, $data, false);
}
~~~
* 必须传入`Pool`创建时使用的`key`
* 底层不支持`msg_send`的第二个参数`mtype`,请传入任意非`0`值
';