1.swoole 的進程模型
swoole是一個多進程模型的框架,當啟動一個進程swoole應用時,一共會創建2+n+m個線程,n為worker進程數,m為TaskWorker進程數,1個master進程和一個manager進程,關系如下圖所示

Master進程為主進程,該進程會創建Manager進程、Reactor線程等工作進/線程
其中三種進程之間的關系是:
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以多進程的方式運行
2.swoole代碼
開啟taskworker需要配置task_worker_num,task_worker的數量
$this->serv->set(['worker_num'=>4,'task_worker_num'=>4,'daemonize'=>false]);
還需要實現回調方法,onTask,onFinish
$this->serv->on('Task',[$this,'onTask']); $this->serv->on('Finish',[$this,'onFinish']);
