`
韩悠悠
  • 浏览: 842568 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

CshBBrain架构介绍

    博客分类:
  • web
 
阅读更多
在介绍CshBBrain服务器架构前,我们先分析下业界流行NIO框架的架构,目前业界流行的NIO框架有Mina,Netty,Grizzly等。他们都采用了Reactor模式,下面上张Reactor模式的示意图:


1.核心组件包括:

1.1.Synchronous Event Demultiplexexer:Event loop + 事件分离

1.2.Dispatcher:事件派发,可以采用多线程实现

1.3.Rqeust Handler:事件处理,业务代码



2.Reactor线程配置:

2.1 Boss Thread + Worker Thread:

2.1.1.Boss 处理OP_ACCEPT、OP_CONNECT,处理连接的接入

2.1.2.Worker处理OP_READ、OP_WRITER,处理IO读写



2.2 Reactor线程数量配置:

Netty: 1 + 2 * CPU内核数量

Mina:   1 + CPU 内核数量 + 1

Grizzly: 1 + 1

CshBBrain:1 + n * CPU内核数量 (运行时可根据需要自己灵活配置,n:为网络数据读写监听线程CPU内核因子,例如设置为1则表示系统将为每个内核创建1个数据读写监听线程,你可以根据自己服务器的性能和需要配置2,4,8个读写监听线程每内核;设置将更加灵活,对应到系统参数monitorWorker)



3.Reactor模式分工模型:



3.1.OP_READ和OP_ACCEPT都运行在reactor线程

3.2.OP_ACCEPT运行在reactor,OP_READ运行在单独的线程。

3.3.OP_READ和OP_ACCEPT都运行在单独的线程

3.4.OP_READ运行在reactor线程,而OP_ACCEPT运行在单独的线程



4.Reactor模式分工模型的选择



4.1.类echo应用,unmashall和业务处理的开销非常低,选择第一种模型。创建线程和切换线程的开销

4.2.第二、第三、第四种模型,从测试来看,OP_ACCEPT的处理开销很低;从已经完成三路握手的队列移出

4.3.最佳选择:第二种模型,unmashall一般是cpu-bound.业务逻辑代码通常比较耗时,不要在reactor线程处理

CshBBrain 采用的是第二种分工模型。



上张CshBBrain服务器的架构图:



在开发CshBBrain之前,有研究过Mina和Netty,从Mina和Netty的设计上借鉴了不少思想。

1.connectMonitor:负责accept和建立连接,并将连接的Read和Write事件分派给具体的readWriteMonitor线程,分配策略采用简单的平均分配法。

2.readWriteMonitor:负责监听每个连接的Read事件和Write事件,并注册连接的Read和Write监听事件。当程序触发Write事件,直接调用连接的Write代码。当触发连接的Read事件时,程序创建一个Read task 并将Read task放入Read task Queue队列中。

3.processDistribute:负责给Read task Queue队列中的任务分配Worker处理线程进行处理。

4.Worker:负责从连接读取数据,解码数据,调用业务处理程序,编码数据,并创建write task 任务放入到Write Task Queue,readWriteMonitor线程会获取队列中的write task 进行write事件注册。
  • 大小: 50.7 KB
  • 大小: 65.7 KB
分享到:
评论

相关推荐

    宝贝鱼(CshBBrain)_是一个来自中国的简单的轻量级的高性能的WebSocket服务器。支持服_CshBBrain.zip

    宝贝鱼(CshBBrain)_是一个来自中国的简单的轻量级的高性能的WebSocket服务器。支持服_CshBBrain

    开源WebSocket服务器项目 宝贝鱼(CshBBrain)版本发布

    开源WebSocket服务器项目“宝贝鱼”(CshBBrain)提供了一个实现这一功能的解决方案。 CshBBrain V1.0.1是一个针对开发者的工具,它实现了WebSocket服务器的基本功能,并且是开源的,允许开发者根据自己的需求进行...

    CshBBrainAIO V4.0.3(宝贝鱼)

    【CshBBrainAIO V4.0.3(宝贝鱼)】是一个基于Java平台的高级I/O(Asynchronous Input/Output,简称AIO)框架,通常用于开发高性能、高并发的网络应用。AIO与传统的IO模型不同,它允许程序在数据准备就绪后才进行实际...

    CshBBrainJS.zip

    为了更好的支持开发基于Websocket的应用,开源WebSocket服务器项目 宝贝鱼(CshBBrain)推出了与之配套的 前台WebSocket API js CshBBrainJS框架。CshBBrainJS的主要目的是与开源WebSocket服务器项目 宝贝鱼(CshBBrain...

    简单的基于 Kotlin 和 JavaFX 实现的推箱子小游戏示例代码

    简单的基于 Kotlin 和 JavaFX 实现的推箱子小游戏示例代码。这个游戏包含了基本的地图布局、玩家控制角色推动箱子到目标位置的功能,不过目前还只是一个简单的控制台版本,你可以根据后续的提示进一步扩展为图形界面版本并添加推流相关功能(推流相对复杂些,涉及到网络传输和流媒体协议等知识,需要借助如 FFmpeg 或者专门的流媒体库来实现,这里先聚焦游戏本身的逻辑构建)

    基于simulink建立的PEMFC燃料电池机理模型(国外团队开发的,密歇根大学),包含空压机模型,空气路,氢气路,电堆等模型 可以正常进行仿真

    基于simulink建立的PEMFC燃料电池机理模型(国外团队开发的,密歇根大学),包含空压机模型,空气路,氢气路,电堆等模型。 可以正常进行仿真。

    基于springboot的高校教学档案管理系统设计与实现源码(java毕业设计完整源码+LW).zip

    Web端功能1.文件分类管理(文件、图片和视频),可以检索文件(按照分类查看,也可以根据名字检索),可以删除和添加文件,文件可以下载,图片和视频可以在线查看播放2.文件有个物理位置的属性,例如“A柜14排”3.文件可以被用户借阅,可以查看到文件的借阅状态。4.可以查看借阅历史列表信息。(任何借阅的记录都保存下来,用列表的方式展现出来)。5.目标角色分教师、教学秘书、专业负责人、教学院长及管理员6.角色教师通过系统提供的界面,(1)输入教学成果,包括项目、论文、著作封面、获奖证书等,提供成果作证材料,秘书审核后再提交给专业负责人及教学院长审核;(2)输入教学资料,包括教学日历、教学大纲、考试考核方法改革申报表、课程试卷及答案等,上传图片或者PDF文档,提交给教学秘书、专业负责人及教学院长审核。7.教学秘书审核教师提交的教学成果,依据作证材料逐条审核,然后提交给专业负责人及教学院长再作审核。8.专业负责人和教学院长相继审核,给出通过意见或者退回。9.管理员角色负责管理维护系统内部教师信息。10.系统界面设计美观,具有较高的易用性,能够进行角色权限控制...

    物流工厂往复式升降机2018可编辑全套技术资料100%好用.zip

    物流工厂往复式升降机2018可编辑全套技术资料100%好用.zip

    基于USuperStar酒店管理系统(java web课程设计)、全部资料+详细文档+高分项目.zip

    【资源说明】 基于USuperStar酒店管理系统(java web课程设计)、全部资料+详细文档+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    “社区管理数字化”:小区物业管理系统技术架构

    在信息技术飞速发展的今天,我们正生活在一个信息大爆炸的时代。随着计算机技术的进步和移动终端的普及,国内信息技术已经走在了世界前列。在这样的背景下,传统的手工信息处理方式已经无法满足现代社会的需求,必须依靠计算机技术来提高信息处理的效率。 本次开发的小区物业管理系统采用Java技术,旨在通过计算机化管理提升小区物业信息管理的效率。系统实现了报修管理、房屋管理、收费管理、停车位管理、投诉管理和用户管理等多项功能。 小区物业管理系统的计算机化处理,确保了数据传输的即时性,无论是数据的获取还是输入,都能迅速反馈,极大提升了工作效率。同时,系统采用MySQL数据库,为数据提供了安全可靠的存储解决方案。

    【C语音期末/课程设计】银行存取款管理系统(DevC项目)

    设计一个银行存取款管理系统,能够输入和查询客户存款取款记录。在客户文件中,每个客户信息是一条记录,包括编号、客户姓名、支取密码、客户地址、客户电话、账户总金额;在存取款文件中,每次存取款是一条记录,包括编号、日期、类别、存取数目、经办人。类别分为取款和存款两种。本系统能够输入客户存款或取款记录;根据客户姓名查询存款和取款记录

    【雷达跟踪】基于matlab雷达信号目标运动轨迹跟踪(含距离和速度误差)【含Matlab源码 10015期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    VBS超精品代码合集0606~0902chm版最新版本

    在脚本之家的VBS栏目中,我们精心培育并推广了这一资源,使其逐渐被公众所熟知。我们所提供的代码资源,涵盖了从基础到高级技巧的广泛知识,是长期从网络收集和整理的结果,极具收藏价值,是学习VBS不可或缺的平台。 由于过去在查找和分类这些资料时存在不便,我们对内容进行了重新整理。在批处理之家站长的协助下,我们将这些资料转换成了更易于使用的CHM格式。尽管偶尔会出现乱码,且部分VBS代码可能会被杀毒软件误报,但我们确保这些资料是安全可用的。 我们对大家的支持表示衷心的感谢,并鼓励您访问脚本之家VBS栏目的最新内容。

    基于改进A*算法融合DWA算法的机器人路径规划MATLAB仿真程序(含注释) 包含传统A*算法与改进A*算法性能对比?改进A*算法融合DWA算法规避未知障碍物仿真 改进A*算法做全局路径规划,融合动

    基于改进A*算法融合DWA算法的机器人路径规划MATLAB仿真程序(含注释) 包含传统A*算法与改进A*算法性能对比?改进A*算法融合DWA算法规避未知障碍物仿真。 改进A*算法做全局路径规划,融合动态窗口算法DWA做局部路径规划既可规避动态障碍物,又可与障碍物保持一定距离。 任意设置起点与终点,未知动态障碍物与未知静态障碍物。 地图可更改,可自行设置多种尺寸地图进行对比,包含单个算法的仿真结果及角速度线速度姿态位角的变化曲线,仿真图片丰富

    最小误差图像分割matlab代码

    阈值分割是常见的直接对图像进行分割的算法,根据图像像素的灰度值的不同而定。对应单一目标图像,只需选取一个阈值,即可将图像分为目标和背景两大类,这个称为单阈值分割;如果目标图像复杂,选取多个阈值,才能将图像中的目标区域和背景被分割成多个,这个称为多阈值分割,此时还需要区分检测结果中的图像目标,对各个图像目标区域进行唯一的标识进行区分。阈值分割的显著优点,成本低廉,实现简单。当目标和背景区域的像素灰度值或其它特征存在明显差异的情况下,该算法能非常有效地实现对图像的分割。阈值分割方法的关键是如何取得一个合适的阈值,近年来的方法有:用最大相关性原则选择阈值的方法、基于图像拓扑稳定状态的方法、灰度共生矩阵方法、最大熵法和峰谷值分析法等,更多的情况下,阈值的选择会综合运用两种或两种以上的方法,这也是图像分割发展的一个趋势。

    机器学习(预测模型):英特尔公司历史股票数据的数据集

    是一个包含英特尔公司(Intel Corporation,股票代码:INTC)从1980年至2024年历史股票数据的数据集。这个数据集提供了每日的股票价格信息,包括开盘价、最高价、最低价、收盘价以及调整后的收盘价,同时还记录了每天的交易量。这些数据对于分析英特尔的市场表现、股票价格趋势以及进行金融分析和预测模型的构建非常有用。 数据集的特点包括: 时间跨度长:覆盖了超过40年的时间,能够提供长期的股票市场趋势分析。 数据详细:包含了每日的股价和交易量,有助于进行深入的技术分析。 调整后的价格:提供了调整后的收盘价,考虑了股票分割、股息和其他公司行为,使得数据更加准确。 来源可靠:数据来源于Yahoo Finance,这是一个广泛认可的获取历史金融数据的平台。 使用这个数据集,分析师和投资者可以进行多种分析,如时间序列分析、股票价格预测和财务分析。这些分析有助于理解英特尔作为半导体行业领导者的发展和表现,以及其在个人电脑技术背后的推动作用。数据集的长期视角也为研究市场趋势和投资决策提供了宝贵的信息。

    (180339652)开源基于51单片机的多功能智能闹钟设计

    内容概要:包含温湿度、空气质量、用户交互菜单等功能设计的51单片机智能闹钟 适用人群:对51单片机有基础的了解,具备一定的C语言编程基础,学生与单片机爱好者 能学到什么:仅做借鉴参考,相关设计的思路,一些基础的单片机编程方法。 阅读建议:内置较详细注释可供理解查看,仍有许多不足之处,仅做参考,多多指教。。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    基于JavaEE课程设计Javaweb课程设计基于spring Boot + Mybatis Plus + Vue + Android原生,前后端分离。附带设计

    【资源说明】 基于Java EE 课程设计 Java web 课程设计 基于spring Boot + Mybatis Plus + Vue + Android原生,前后端分离。附带设计报告、UML建模,团队协作赛鸽数据管理系统、全部资料+详细文档+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    基于springboot的医疗服务系统源码(java毕业设计完整源码+LW).zip

    项目均经过测试,可正常运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea

    money:一个Python编写的货币类库 带有可选的 CLDR 后端本地化格式,提供可扩展的货币兑换解决方案

    简介:money 是一个专为 Python 设计的货币类库,旨在帮助开发者更方便、更精确地处理货币相关的操作。 核心功能 精确的货币表示与计算:使用decimal类型来处理货币金额,避免了使用浮点数进行货币计算时可能出现的精度丢失问题,从而确保计算结果的高精度,适用于对精度要求极高的金融交易、电子商务、账单等领域. 多货币支持:内置了符合 ISO 4217 标准的世界各国货币数据,支持多种货币的符号、单位、汇率等功能,可轻松创建不同货币类型的货币对象,并对其进行各种数学运算,如加、减、乘、除等,且能确保精度的正确性,适合需要进行国际化货币处理的应用. CLDR 后端本地化格式:提供了可选的 CLDR(Common Locale Data Repository)后端本地化格式功能,通过format()方法,可根据不同的地区设置,将货币金额格式化为符合当地习惯的字符串形式,如$1,234.57(美国格式)、1.234,57\xa0$(西班牙格式)等,增强了货币显示的本地化和国际化适应性. 可扩展的货币兑换解决方案:通过 “安装” 实现了抽象基类。

Global site tag (gtag.js) - Google Analytics