swoole 进程类型划分 区别 Master 进程、Reactor 线程、Worker 进程、Task 进程、Manager 进程的区别与联系
做人要安安稳稳本本分分,因为,你也根本搞不出什么幺蛾子。
Master进程
Master 进程是一个多线程进程
Reactor 线程
- Reactor 线程是在 Master 进程中创建的线程
- 负责维护客户端 TCP 连接、处理网络 IO、处理协议、收发数据
- 不执行任何 PHP 代码
- 将 TCP 客户端发来的数据缓冲、拼接、拆分成完整的一个请求数据包
Worker 进程
- 接受由 Reactor 线程投递的请求数据包,并执行 PHP 回调函数处理数据
- 生成响应数据并发给 Reactor 线程,由 Reactor 线程发送给 TCP 客户端
- 可以是异步非阻塞模式,也可以是同步阻塞模式
- Worker 以多进程的方式运行
Task 进程
- 接受由 Worker 进程通过 Swoole\Server->task/taskwait/taskCo/taskWaitMulti 方法投递的任务
- 处理任务,并将结果数据返回(使用 Swoole\Server->finish)给 Worker 进程
- 完全是同步阻塞模式
- Task 以多进程的方式运行
Manager 进程
负责创建 / 回收 worker/task 进程
他们之间的关系可以理解为 Reactor 就是 nginx,Worker 就是 PHP-FPM。Reactor 线程异步并行地处理网络请求,然后再转发给 Worker 进程中去处理。Reactor 和 Worker 间通过 unixSocket 进行通信。
一个更通俗的比喻,假设 Server 就是一个工厂,那 Reactor 就是销售,接受客户订单。而 Worker 就是工人,当销售接到订单后,Worker 去工作生产出客户要的东西。而 TaskWorker 可以理解为行政人员,可以帮助 Worker 干些杂事,让 Worker 专心工作。
示意图