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']);
  • 相关阅读:
    【解决火车轮播图小圆点跳的问题】传统轮播图-三位法
    jq龙禧轮播图
    QT MSVC环境中添加QWT
    XDMA ip core的使用
    PCIe基础知识与例程分析----PIO_demo
    Day04 (四)_TCP文件传输设计
    Day04 (三)_UDP传输端设计
    Day04 (二)_TCP传输客户器端设计
    Day04 (一)_TCP传输服务器端设计
    Day03 (下)_Qt文件系统
  • 原文地址:https://www.cnblogs.com/jint-php7/p/11672343.html
Copyright © 2011-2022 走看看