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']);
swoole2——Worker与TaskWorker进程的更多相关文章
- Master Reactor Manager Worker TaskWorker(Task)
1.Master进程 master进程为主进程,该进程会创建Manager进程和Reactor线程等工作进/线程 swoole的主进程,是个多线程的程序. 主进程内的回调函数: onStart onS ...
- Python复习 基础知识
动态语言:变量类型不固定称之为动态语言 什么是动态语言呢? 可以简单的理解为直接被解释执行的语言称为动态语言. 而需要编译环境将程序转换为其它的编码再执行的语言称为静态语言. 当前静态语言有:jav ...
- [记录]Python高并发编程
========== ==多进程== ========== 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fo ...
- Swoole引擎原理的快速入门干货
更多内容,欢迎关注微信公众号:全菜工程师小辉~ 过去一年使用PHP和Java两种技术栈完成了一个游戏服务器项目.由于项目中有高频的网络请求,所以PHP技术栈尝试使用Swoole引擎(基于事件的高性能异 ...
- swoole详解
1.swoole结构图 2.swoole流程图 3.详细流程图 3.1.Master:处理核心事件驱动(主进程)3.2.Reactor: 处理TCP连接,收发数据的线程.Swoole的主线程在Acce ...
- nginx——优化 Nginx worker 进程数
Nginx 有 Master 和 worker 两种进程,Master 进程用于管理 worker 进程,worker 进程用于 Nginx 服务 worker 进程数应该设置为等于 CPU 的核数, ...
- nginx worker进程循环
worker进程启动后,其首先会初始化自身运行所需要的环境,然后会进入一个循环,在该循环中不断检查是否有需要执行的事件,然后处理事件.在这个过程中,worker进程也是需要与master进程交互的,更 ...
- swoole的进程模型架构
swoole的强大之处就在与其进程模型的设计,既解决了异步问题,又解决了并行. 主线程MainReactor swoole启动后主线程会负责监听server socket,如果有新的连接accept, ...
- PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
在一般的 Server 程序中都会有一些耗时的任务,比如:发送邮件.聊天服务器发送广播等.如果我们采用同步阻塞的防水去执行这些任务,那么这肯定会非常的慢. Swoole 的 TaskWorker 进程 ...
随机推荐
- 参加杭州 2019 AI Bootcamp有感与总结(2)
接上篇 参加杭州 2019 AI Bootcamp有感与总结(1) - repeatedly - 博客园 午餐畅谈的收获 先感谢主办方提供的午餐,中午午休的时候,大家聊了很多,或者说主要是听大佬谈.聊 ...
- requests第三方库
requests第三方库 简介: requests是一个优雅而简单的Python 第三方HTTP请求库,专为人类而构建. requests的官方文档同样也非常的完善详尽,而且少见的有中文官方文档:ht ...
- python3数据分析,安装学习
python3数据分析,安装学习 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-09-26. 为了简单.安装 anaconda3 就好啦. 因为安装原版python3,用pip安装 ...
- Orcle如何获取当前时间
Oracle获取当月所有日期: SELECT TRUNC(SYSDATE, 'MM') + ROWNUM - 1 FROM DUAL CONNECT BYROWNUM <= TO_NUMBER( ...
- NLP入门(十一)从文本中提取时间
在我们的日常生活和工作中,从文本中提取时间是一项非常基础却重要的工作,因此,本文将介绍如何从文本中有效地提取时间. 举个简单的例子,我们需要从下面的文本中提取时间: 6月28日,杭州市统计局权 ...
- TortoiseGit 保存账号密码
TortoiseGit下载网址:http://download.tortoisegit.org/tgit/ 修改.gitconfig .gitconfig 用于记录git配置信息 路径:系统盘:\Us ...
- (七十七)c#Winform自定义控件-采样控件-HZHControls
官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...
- JVM学习分享-练习题
package org.fenixsoft.clazz; public class TestClass { private int m; public int inc() { return m + 1 ...
- Penetration testing“Linux install Nessus”
Ax_Download www.tenable.com/products/nessus-home,need sent email. Bx_Install su ls dpkg -i [filename ...
- 中小后台系统UI框架--EasyUI
后台开发人员不擅长前端UI界面,而小型软件公司没有专职美工岗位,开发人员只能借助开源UI框架,复用已有组件,完成用户操作界面.EasyUI是基于jQuery的UI插件集合体,可帮助开发者轻松构建网页. ...