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

 

posted on 2019-10-14 16:47  ljstu  阅读(844)  评论(0编辑  收藏  举报