收藏一下 总是忘记这张图 .
Swoole 进程模型
从上图中可以看出,Swoole
在启动后会创建 Master
进程和 Manager
进程。Master
进程会创建 Master
线程、Reactor
线程、心跳检测线程等,Manager
进程会创建 Worker
进程和 Task
进程。
Swoole
的线程和进程之间分别有什么作用呢?
Master
进程这个进程是 swoole
的核心进程,也是一个多线程的进程,一个 Master
线程和多个 Reactor
进程,Reactor
线程的数量可以配置。
Master
线程 Master
线程用于 accept
新的连接,然后会评估每个 Reactor
线程维护的连接数,最后将这个新的连接分配给连接数量最少的那个 Reactor 线程,从而保证每个 Reactor
线程的负载量是均衡的。Master
线程还负责对所有信号的接管(包括请求处理、重启进程、重载配置等),避免 Reactor
线程收到信号的打扰中断。
Reactor
线程当一个 socket
可读或可写的时候,就由 Reactor
线程将事件转发给 worker
进程。
Manager
进程 Manager
进程管理着 Worker
进程和 Task
进程,Worker
进程和 Task
进程是由 Manager
进程 fork
出来的。Manager
进程会监管 Worker
进程和 Task
进程的状态,当他们意外挂掉时,Manager
进程会重新拉起新的进程,Manager
进程还负责 Worker
进程和 Task
进程的平滑重启。
Worker
进程 Worker
进程是由 Manager
进程 fork
而来,用于处理具体的业务逻辑。Worker
进程可以用同步的方式去干活,也可以用异步的方式去干活。
Task
进程 Task
进程是一种特殊的 Worker
进程,专门用于处理一些比较耗时的操作。Task
进程只能工作在同步的方式下,不能使用异步。所以 Task
进程中不能使用定时器,而 Worker
进程可以。