文档章节

swoole架构

吾爱
 吾爱
发布于 01/17 09:16
字数 685
阅读 59
收藏 0
PHP

输入图片说明 swoole的强大之处就在与其进程模型的设计,既解决了异步问题,又解决了并行。

主线程MainReactor swoole启动后主线程会负责监听server socket,如果有新的连接accept,主线程会评估每个Reactor线程的连接数量。将此连接分配给连接数最少的reactor线程。这样的好处是

每个reactor线程持有的连接数是非常均衡的,没有单个线程负载过高的问题 解决了惊群问题,尤其是拥有多个listen socket时,节约了线程唤醒和切换的开销 主线程内还接管了所有信号signal的处理,使Reactor线程运行中可以不被信号打断。 管理进程Manager swoole运行中会创建一个单独的管理进程,所有的worker进程和task进程都是从管理进程Fork出来的。管理进程会监视所有子进程的退出事件,当worker进程发生致命错误或者运行生命周期结束时,管理进程会回收此进程,并创建新的进程。

管理进程还可以平滑地重启所有worker进程,以实现程序代码的重新加载。

异步Reactor线程 swoole拥有多线程Reactor,所以可以充分利用多核,开启CPU亲和设置后,Reactor线程还可以绑定单独的核,节约CPU Cache开销。

swoole的Reactor线程是全异步非阻塞的,即使你的worker进程用了同步模式,依然不影响reactor线程的性能。在worker进程组很繁忙的状况下,reactor线程完全不受影响,依然可以收发处理数据。

TCP是流式的,没有边界,所以处理起来很麻烦。Reactor线程可以根据EOF或者包头长度,自动缓存数据,组装数据包。等一个请求完全收到后,再投递给Worker进程。

同步或异步Worker进程 与传统的半同步半异步服务器不同,Swoole的worker进程可以是同步的也可以异步的,这样带来了最大的灵活性。当你的Server需要很高性能,业务逻辑较为简单时你可以选择异步模式。当业务逻辑复杂多变,可以选择同步模式。

这里要比Node.js强大太多了。

TaskWorker进程池 swoole除了Reactor线程,Worker进程外还提供了TaskWorker进程池,目的是为了解决在业务代码中,有些逻辑部分不需要马上执行。利用task进程池,可以方便的投递一个异步任务去执行,在Worker进程空闲时再去捕获任务执行的结果。

本文转载自:http://rango.swoole.com/archives/305

共有 人打赏支持
吾爱
粉丝 143
博文 264
码字总数 89585
作品 0
后端工程师
一些关于swoole的问题(7个),求版主回答

问题1: swoole的C架构是什么样子,你使用的是HS/HA 还是 L/F 管理工作节点。 问题2: swoole每次接收到连接是否是创建新的work进程或work线程,然后关闭连接后销毁,还是有其他机制比如pre...

matyhtf
2014/04/18
2.8K
6
基于swoole的job调度组件

swoole-jobs 基于swoole的job调度组件 使用场景 web中较慢的逻辑,比如统计/email/短信/图片处理等 单机job任务并发数10000以内,但可以多机器部署 架构图 特性 基于swoole的job调度组件 re...

太阳黑子
2016/10/29
38
0
使用php开发,基于swoole扩展开发的工具--swoole-crontab

Swoole-Crontab(基于Swoole扩展) 1.概述 基于swoole的定时器程序,支持秒级处理. 异步多进程处理。 完全兼容crontab语法,且支持秒的配置,可使用数组规定好精确操作时间 单中心-多客户端模式...

ClownFish
2014/12/29
4.2K
2
swoole server 超时控制以及踩过的坑

在选定swoole作为PHP微服务的底层以后,我找了很久swoole server端的超时控制,但是,swoole的官方文档里,没有写server端的超时控制(类似于php-fpm的requestterminatetimeout配置),swool...

anoty
08/07
0
0
Swoole-Crontab 1.1 发布,基于 Swoole 的定时任务触发器

Swoole-Crontab 是基于Swoole的定时任务触发器 基于swoole的定时器程序,支持秒级处理. 异步多进程处理。 完全兼容crontab语法,且支持秒的配置,可使用数组规定好精确操作时间 单中心-多客户...

ClownFish
2017/07/17
1K
6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部