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']);
  • 相关阅读:
    Vue核心之数据劫持
    Flex 布局教程
    Grid布局
    我们都在深夜,参差不齐地入眠
    一个十分好用的动画工具:Velocity.js
    前端知识点总结——jQuery(下)
    前端知识点总结——jQuery(上)
    虫师Selenium2+Python_2、测试环境搭建
    虫师Selenium2+Python_11、自动化测试项目实战
    虫师Selenium2+Python_12、BDD框架之Lettuce入门
  • 原文地址:https://www.cnblogs.com/jint-php7/p/11672343.html
Copyright © 2011-2022 走看看