swoole Worker进程

在文章之前先看两张图片,试着去理解一下Swoole Server运行流程和进程/线程结构.

运行流程图

运行流程图

进程/线程结构图

进程/线程结构图
为了能更好的理解Swoole Server 的运行流程,下面我们创一个简单的实例server-process.php配合上面的图片进行讲解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$serv = new swoole_server('127.0.0.1', 9501);
$serv->set([
'worker_num' => 2,
'task_worker_num' => 1,
]);
$serv->on('Connect', function ($serv, $fd) {
});
$serv->on('Receive', function ($serv, $fd, $fromId, $data) {
});
$serv->on('Close', function ($serv, $fd) {
});
$serv->on('Task', function ($serv, $taskId, $fromId, $data) {
});
$serv->on('Finish', function ($serv, $taskId, $data) {
});
$serv->start();

然后执行 ps 命令查看:

1
2
3
4
5
6
7
$ ps aux | grep server-process
root 21843 xxx... php server-process.php
root 21844 xxx... php server-process.php
root 21846 xxx... php server-process.php
root 21847 xxx... php server-process.php
root 21848 xxx... php server-process.php
root 21854 xxx... grep --color=auto server-process

排除掉 grep 那条,一共有5条。
相比Master-Worker模式,swoole 的进程模型可以用Master-Manager-Worker来形容。即在Master-Worker的基础上又增加了一层Manager进程。

  • 1个 Master 进程
  • 1个 Manager 进程
  • 2个 Worker 进程
  • 1个 Task 进程

Swoole 是一个多进程模式的框架(可以类比Nginx的进程模型),当启动一个Swoole应用时,一共会创建2 + n + m个进程,其中n为 Worker 进程数,m为TaskWorker进程数,2为一个 Master 进程和一个 Manager 进程,它们之间的关系如下图所示。
swoole 进程模型
其中,Master进程为主进程,该进程会创建Manager进程、Reactor线程等工作进/线程。

  • Reactor线程实际运行epoll实例,用于accept客户端连接以及接收客户端数据;
  • Manager进程为管理进程,该进程的作用是创建、管理所有的Worker进程和TaskWorker进程。
坚持原创技术分享,您的支持将鼓励我继续创作!