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 专心工作。

 

示意图

 

 

posted @ 2021-10-08 08:52  方达达  阅读(192)  评论(0编辑  收藏  举报