1.Master进程

master进程为主进程,该进程会创建Manager进程和Reactor线程等工作进/线程

swoole的主进程,是个多线程的程序.

主进程内的回调函数:

  • onStart
  • onShutdown
  • onMasterConnect
  • onMasterClose
  • onTimer

2.Reactor线程

Reactor线程是真正处理TCP连接,收发数据的线程。

Swoole的主线程在Accept新的连接后,会将这个连接分配给一个固定的Reactor线程,并由这个线程负责监听此socket。在socket可读时读取数据,并进行协议解析,将请求投递到Worker进程。在socket可写时将数据发送给TCP客户端.

3.Manager进程

Manager进程是管理进程,该进程是为了创建管理所有的woker进程和TaskWorker进程,swoole中worker/task进程都是由Manager进程Fork并管理的。(master主进程为多线程进程,不能安全的执行fork操作)

  • 子进程结束运行时,manager进程负责回收此子进程,避免成为僵尸进程。并创建新的子进程
  • 服务器关闭时,manager进程将发送信号给所有子进程,通知子进程关闭服务
  • 服务器reload时,manager进程会逐个关闭/重启子进程

管理进程内的回调函数

  • onManagerStart
  • onManagerStop

4.Worker进程

worker进程是工作进程,所有的业务逻辑都在该进程中进行,当Reactor线程接收到来自客户端的数据后,会将数据打包通过管道发送给某个Worker进程.

Swoole提供了完善的进程管理机制,当Worker进程异常退出,如发生PHP的致命错误、被其他程序误杀,或达到max_request次数之后正常退出。主进程会重新拉起新的Worker进程。 Worker进程内可以像普通的apache+php或者php-fpm中写代码。不需要像Node.js那样写异步回调的代码。

Worker进程内的回调函数

  • onWorkerStart
  • onWorkerStop
  • onConnect
  • onClose
  • onReceive
  • onTimer
  • onFinish

5.TaskWorker进程

Swoole的业务逻辑部分是同步阻塞运行的,如果遇到一些耗时较大的操作,例如访问数据库、广播消息等,就会影响服务器的响应速度。因此Swoole提供了Task功能,将这些耗时操作放到另外的进程去处理,当前进程继续执行后面的逻辑

task进程必须是同步阻塞的,task进程支持定时器

task_worker进程内的回调函数

  • onTask
  • onWorkerStart

6.对比关系说明

职责功能:

Reactor线程

  • 负责维护客户端TCP连接、处理网络IO、处理协议、收发数据
  • 完全是异步非阻塞的模式
  • 全部为C代码,除Start/Shudown事件回调外,不执行任何PHP代码
  • TCP客户端发来的数据缓冲、拼接、拆分成完整的一个请求数据包
  • Reactor以多线程的方式运行

Worker进程

  • 接受由Reactor线程投递的请求数据包,并执行PHP回调函数处理数据
  • 生成响应数据并发给Reactor线程,由Reactor线程发送给TCP客户端
  • 可以是异步非阻塞模式,也可以是同步阻塞模式
  • Worker以多进程的方式运行

TaskWorker进程

  • 接受由Worker进程通过swoole_server->task/taskwait方法投递的任务
  • 处理任务,并将结果数据返回(swoole_server->finish)给Worker进程
  • 完全是同步阻塞模式
  • TaskWorker以多进程的方式运行

关系:

可以理解为Reactor就是nginxWorker就是php-fpmReactor线程异步并行地处理网络请求,然后再转发给Worker进程中去处理。ReactorWorker间通过UnixSocket进行通信。

php-fpm的应用中,经常会将一个任务异步投递到Redis等队列中,并在后台启动一些php进程异步地处理这些任务。Swoole提供的TaskWorker是一套更完整的方案,将任务的投递、队列、php任务处理进程管理合为一体。通过底层提供的API可以非常简单地实现异步任务的处理。另外TaskWorker还可以在任务执行完成后,再返回一个结果反馈到Worker

SwooleReactorWorkerTaskWorker之间可以紧密的结合起来,提供更高级的使用方式。

一个更通俗的比喻,假设Server就是一个工厂,那Reactor就是销售,接受客户订单。而Worker就是工人,当销售接到订单后,Worker去工作生产出客户要的东西。而TaskWorker可以理解为行政人员,可以帮助Worker干些杂事,让Worker专心工作。

转载于:https://www.cnblogs.com/Mr-Echo/p/10850122.html

Master Reactor Manager Worker TaskWorker(Task)相关推荐

  1. (81)FPGA复位激励(task)

    (81)FPGA复位激励(task) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA复位激励(task) 5)结语 1.2 FPGA简介 FPGA(Field ...

  2. (58)FPGA乘法器实现(task)

    (58)FPGA乘法器实现(task) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA乘法器实现(task) 5)结语 1.2 FPGA简介 FPGA(Fiel ...

  3. IBM Installation Manager 工具概述(转)

    IBM Installation Manager 工具概述 IBM Installation Manager 是一款可运行在多种平台(如 IBM i. z/OS. Windows. Linux.Uni ...

  4. 【 Verilog HDL 】函数(function)与任务(task)简单介绍

    背景 关于函数和任务,是我这几天一直想写的内容,原因在于我上篇博文:Verilog HDL 使用规范(一),最后提到的问题,关于代码书写的规范中,要求:用一个函数(function)来代替表达式的多次 ...

  5. 《CLR Via C# 第3版》笔记之(十九) - 任务(Task)

    除了上篇中提到的线程池,本篇介绍一种新的实现异步操作的方法--任务(Task). 主要内容: 任务的介绍 任务的基本应用 子任务和任务工厂 任务调度器 并行任务Parallel 1. 任务的介绍 利用 ...

  6. .net 任务(Task)

    1. Task (任务): 很容易调用 ThreadPool.QueueUserWorkItem 实现异步操作,但是这个技术有许多 .net 引入Task类型来使用任务. 如下几种方式都是实现异步的方 ...

  7. spring任务调度(task)

    spring 任务调度总结 参考资料 http://www.ibm.com/developerworks/cn/java/j-quartz/ http://www.opensymphony.com/q ...

  8. Scala基于Akka模拟Spark Master Worker进程间通信(二):Worker定时向Master心跳

    最终效果 Master package cn.zxl.spark.masterimport akka.actor.{Actor, ActorRef, ActorSystem, Props} impor ...

  9. Scala基于Akka模拟Spark Master Worker进程间通信(一):Worker向Master注册

    最终效果 master: worker: 思路分析 Master代码 package cn.zxl.spark.masterimport akka.actor.{Actor, ActorRef, Ac ...

  10. 安装redisclient、redis-cluster,使用redis desktop manager和java(eclipse)连接redis过程遇到问题汇总

    如果你看到这里,我默认你已经安装好了redis,并且已经成功的在虚拟机的Linux系统中ping通. 介绍一下我的环境:VMware虚拟机安装centos 6.5版的Linux系统,redis是3.0 ...

最新文章

  1. 13. jquery ajax json 学习
  2. Git分支高级管理[四]
  3. php系统函数代码,PHP自定义函数+系统函数库(代码示例)
  4. 恢复mysql中root用户的所有权限_如何还原MySQL root用户的全部权限
  5. 长春高中计算机考试时间安排,长春部分高中期末考试时间出炉!
  6. mysql设置查询结果最大值_查找MySQL查询结果字段的最大值
  7. Python制作AI贪吃蛇,细节、思路都写下来了!
  8. 鼠标移入通过时间控制实现两个不同步的动画效果
  9. python药店销售数据分析_解析医院药店销售数据,看看Python数据分析结果有什么惊人的发现|python基础教程|python入门|python教程...
  10. Julia-数学运算和初等函数
  11. 暮光之城4下高清下载地址|暮光之城4第二部高清下载地址
  12. 使用 SoundSource 取代Mac系统内置的音量控制器
  13. Java对接谷歌邮箱-代码及其谷歌邮箱账号配置
  14. cocos2dx 3.17海外sdk接入填坑全纪录 Appodeal(广告) SDK 接入(5)
  15. 计算机网络之IP协议与以太网
  16. 计算机图形学VC 配置,计算机图形学(VC++实现)(第2版)
  17. Linux_多线程(进程与线程的联系_pthread库_线程创建_线程等待_线程正常终止_线程取消_线程分离_pthread_t与LWP)
  18. 关于《完全用Linux工作》的思考
  19. PS和AI结合制作人物矢量图
  20. python+pands+matplotlib分析Excel表格

热门文章

  1. 七个办法只有一个有效:200 PORT command successful. Consider using PASV.425 Failed to establish connection.
  2. 全网首发:Freeswitch会议房间增加标识
  3. 快速安装Pytorch
  4. 对外技术合作,一定要提供一个DEMO供别人参考
  5. VS C++ sprintf 格式
  6. 100阶乘c语言如何实现,求10000的阶乘(c语言代码实现)
  7. 计算机读不出光盘,win7光盘读不出来怎么办|win7光驱读不出光盘的解决方法
  8. java多对多_Java多对多关系示例
  9. hive xmlserde_各种数据格式的Hive建表语句
  10. 自由落体运动c语言编程_欧姆龙NX PLC 轴运动功能块,ST和梯形图双语言