# Worker进程
---
<!-- toc -->
## Swoole进程模型
首先,我们需要了解一下Swoole的进程模型。Swoole是一个多进程模式的框架(可以类比Nginx的进程模型),当启动一个Swoole应用时,一共会创建2 + n + m个进程,其中n为Worker进程数,m为TaskWorker进程数,2为一个Master进程和一个Manager进程,它们之间的关系如下图所示。
![structure.png-18kB](http://static.zybuluo.com/Lancelot2014/xpatz2wxco47xrzi5xc3keni/structure.png)
其中,Master进程为主进程,该进程会创建Manager进程、Reactor线程等工作进/线程。
* Reactor线程实际运行epoll实例,用于accept客户端连接以及接收客户端数据;
* Manager进程为管理进程,该进程的作用是创建、管理所有的Worker进程和TaskWorker进程。
## Worker进程简介
Worker进程作为Swoole的工作进程,所有的业务逻辑代码均在此进程上运行。当Reactor线程接收到来自客户端的数据后,会将数据打包通过管道发送给某个Worker进程(数据分配方法见[dispatch_mode](http://www.baidu.com))。
## Worker进程生命周期
一个Worker进程的生命周期如图所示:
<!-- {% flowchart %}
st=>start: Create
start=>operation: onWorkerStart
recv=>operation: onReceive/onConnect/onClose
op=>operation: Receive and Handle Data
cond=>condition: Max Request or Error
stop=>operation: onWorkerStop
e=>end: Stop
st->start->recv->op->cond
cond(yes)->stop
cond(no)->recv
stop->e
{% endflowchart %}
-->
当一个Worker进程被成功创建后,会调用`onWorkerStart`回调,随后进入事件循环等待数据。当通过回调函数接收到数据后,开始处理数据。如果处理数据过程中出现严重错误导致进程退出,或者Worker进程处理的总请求数达到指定上限,则Worker进程调用`onWorkerStop`回调并结束进程。
- 序章
- 1 环境搭建
- 1.1 环境搭建
- 1.2 搭建Echo服务器
- 2 初识Swoole
- 2.1 Worker进程
- 2.2 TaskWorker进程
- 2.3 Timer定时器
- 2.4 Process进程
- 2.5 Table内存表
- 2.6 多端口监听
- 2.7 sendfile文件支持
- 2.8 SSL支持
- 3 Swoole协议
- 3.1 EOF协议
- 3.2 固定包头协议
- 3.3 Http协议
- 3.4 WebSocket协议
- 3.5 MTQQ协议
- 4 Swoole客户端
- 4.1 Client
- 4.2 异步Http客户端
- 4.3 异步WebSocket客户端
- 4.4 异步MySQL客户端
- 4.5 异步Redis客户端
- 5 Swoole异步IO
- 5.1 AsyncIO
- 5.2 EventLoop
- 6 Swoole使用
- 7 框架应用
- 7.1 ZPHP
- 7.2 TSF
- 7.3 Hprose
- 7.4 Dora-rpc
- 8 已有框架支持
- 8.1 Yaf
- 8.2 Phalcon
- 8.3 Thinkphp
- 9 项目实战
- 附录*配置选项
- 附录*回调函数
- 附录*属性列表
- 附录*函数列表