zoukankan      html  css  js  c++  java
  • 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']);
  • 相关阅读:
    luogu P1833 樱花 看成混合背包
    luogu P1077 摆花 基础记数dp
    luogu P1095 守望者的逃离 经典dp
    Even Subset Sum Problem CodeForces
    Maximum White Subtree CodeForces
    Sleeping Schedule CodeForces
    Bombs CodeForces
    病毒侵袭持续中 HDU
    病毒侵袭 HDU
    Educational Codeforces Round 35 (Rated for Div. 2)
  • 原文地址:https://www.cnblogs.com/jint-php7/p/11672343.html
Copyright © 2011-2022 走看看