swoole2——Worker與TaskWorker進程


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']);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM