`

Netty并发之ExecutionHandler

 
阅读更多

 

 

大家都知道,Netty是一个基于事件的NIO框架。在Netty中,一切网络动作都是通过事件来传播并处理的,例如:Channel读、Channel写等等。回忆下Netty的流处理模型:

Boss线程(一个服务器端口对于一个)—接收到客户端连接—生成Channel—交给Work线程池(多个Work线程)来处理。

具体的Work线程—读完已接收的数据到ChannelBuffer—触发ChannelPipeline中的ChannelHandler链来处理业务逻辑。

注意:执行ChannelHandler链的整个过程是同步的,如果业务逻辑的耗时较长,会将导致Work线程长时间被占用得不到释放,从而影响了整个服务器的并发处理能力。

所以,为了提高并发数,一般通过ExecutionHandler线程池来异步处理ChannelHandler链(worker线程在经过ExecutionHandler后就结束了,它会被ChannelFactory的worker线程池所回收)。在Netty中,只需要增加一行代码:

public ChannelPipeline getPipeline() {
         return Channels.pipeline(
                 new DatabaseGatewayProtocolEncoder(),
                 new DatabaseGatewayProtocolDecoder(),
                 executionHandler, // Must be shared
                 new DatabaseQueryingHandler());
}
例如:
ExecutionHandler executionHandler = new ExecutionHandler(
             new OrderedMemoryAwareThreadPoolExecutor(16, 1048576, 1048576))

 

对于ExecutionHandler需要的线程池模型,Netty提供了两种可选:

1) MemoryAwareThreadPoolExecutor 通过对线程池内存的使用控制,可控制Executor中待处理任务的上限(超过上限时,后续进来的任务将被阻塞),并可控制单个Channel待处理任务的上限,防止内存溢出错误;

2) OrderedMemoryAwareThreadPoolExecutor 是 MemoryAwareThreadPoolExecutor 的子类。除了MemoryAwareThreadPoolExecutor 的功能之外,它还可以保证同一Channel中处理的事件流的顺序性,这主要是控制事件在异步处理模式下可能出现的错误的事件顺序,但它并不保证同一Channel中的事件都在一个线程中执行(通常也没必要)。

例如:

Thread X: --- Channel A (Event A1) --.   .-- Channel B (Event B2) --- Channel B (Event B3) --->
                                      \ /
                                       X
                                      / \
Thread Y: --- Channel B (Event B1) --'   '-- Channel A (Event A2) --- Channel A (Event A3) --->

上图表达的意思有几个:

(1)对整个线程池而言,处理同一个Channel的事件,必须是按照顺序来处理的。例如,必须先处理完Channel A (Event A1) ,再处理Channel A (Event A2)、Channel A (Event A3)

(2)同一个Channel的多个事件,会分布到线程池的多个线程中去处理。

(3)不同Channel的事件可以同时处理(分担到多个线程),互不影响。

OrderedMemoryAwareThreadPoolExecutor 的这种事件处理有序性是有意义的,因为通常情况下,请求发送端希望服务器能够按照顺序处理自己的请求,特别是需要多次握手的应用层协议。例如:XMPP协议。

  • 大小: 97.5 KB
分享到:
评论

相关推荐

    Netty实现原理浅析.docx

    这些设计使得Netty成为了Java平台上的首选网络编程框架之一,广泛应用于高并发、低延迟的系统,如分布式计算、实时通信、游戏服务器等场景。通过深入理解Netty的实现原理,开发者能够更好地利用其特性,优化自己的...

    Netty实现原理浅析.pdf

    此外,Netty还提供了一些特殊的`ChannelHandler`实现,例如`ExecutionHandler`,它可以在处理链中添加线程池,以支持异步处理模型。这样做的好处是可以有效避免长时间运行的任务阻塞事件循环线程,提高系统的并发...

    Netty实现原理浅析

    例如,如果业务处理的handler耗时较长,Netty允许开发者通过添加ExecutionHandler来实现handler的线程池化,从而在不修改原有业务逻辑的情况下提升并发处理能力。Netty提供了MemoryAwareThreadPoolExecutor和...

    java nio 原理浅析

    如果业务处理耗时较长,可以考虑引入ExecutionHandler实现线程池化,以提升并发性能。Netty提供了MemoryAwareThreadPoolExecutor和OrderedMemoryAwareThreadPoolExecutor两种线程池选项,前者限制待处理任务的数量,...

    ZYNQ芯片PL与PS端基于DDR3的AXI_DMA数据交互及GPIO控制的工程源代码实现

    内容概要:本文档详细介绍了ZYNQ芯片上PL(处理器逻辑)和PS(处理系统)端通过DDR3内存的AXI_DMA控制器实现高效数据交互的方法。具体功能包括:通过AXI_DMA进行数据读写操作,利用GPIO接口控制AXI_DMA模块的使能状态,通过AXI_LITE寄存器配置DMA参数如读写地址范围和数据长度,以及PL端DMA写完成时通过中断信号通知PS端。这些功能共同确保了数据交互的灵活性、实时性和准确性。 适合人群:嵌入式系统开发者、FPGA工程师、硬件加速应用开发者。 使用场景及目标:适用于需要在ZYNQ平台上快速构建复杂应用的开发团队,旨在缩短开发周期并提高开发效率。通过本例程,用户可以根据实际需求进行功能扩展和定制,充分利用ZYNQ芯片的优势。 其他说明:该工程源代码不仅展示了PL和PS端之间的高效通信方法,还为后续的功能扩展提供了坚实的基础。

    含风电-光伏与光热电站的N-K安全优化调度模型研究及MATLAB仿真

    内容概要:本文探讨了在电力系统中引入N-K安全约束条件下,风电、光伏和光热电站联合调度的优化模型。通过MATLAB、YALMIP和CPLEX/Gurobi等工具实现了该模型的仿真与性能分析。研究重点在于如何利用光热电站在提升调度灵活性和经济效益的同时减少弃风弃光现象,并通过14节点和118节点的实际案例验证了模型的有效性。 适用人群:从事电力系统优化调度的研究人员和技术人员,尤其是关注新能源接入电网后的稳定性与效率问题的专业人士。 使用场景及目标:适用于希望深入了解N-K安全约束下多源电力系统协同工作的机制,以及希望通过数学建模方法解决实际工程问题的人群。目标是在保障电力供应可靠性的前提下最大化可再生能源利用率。 其他说明:文中提供了详细的伪代码示例,帮助读者更好地理解和应用相关理论知识。此外,还强调了在真实环境中部署此类模型时需要注意的关键点,如数据准备、约束设定等。

    准方波逆变器(也称为改进型方波逆变器)是一种直流到交流的逆变器

    准方波逆变器(也称为改进型方波逆变器)是一种直流到交流的逆变器 准方波逆变器的关键特性: 输出波形:多步方波(更像正弦波而不是纯方波) 谐波:与方波相比有所减少,但仍然很重要 切换:通常每半周期3个或更多步骤 常见阶跃电平:0、+V、0、-V(在正负脉冲之间添加“零电压驻留”)

    正激式小功率开关电源Matlab仿真:开环与电压闭环性能对比及参数配置

    内容概要:本文详细介绍了正激式小功率开关电源在Matlab/Simulink环境下的开环与电压闭环仿真的实现方法及其性能对比。首先,文中提供了构建开环系统的具体步骤和关键组件选择,如选用IRF540作为Power MOSFET以及FR307快恢复二极管,并给出了核心参数设定。接着,针对闭环系统,引入了PID控制器用于调节占空比,解释了PID参数的选择依据及其背后的原理,尤其是积分项的时间常数调整、占空比限制以及微分项的作用。此外,还特别强调了仿真过程中容易出现的问题及解决方案,比如求解器的选择和输出端加入小电容抑制PWM毛刺的方法。通过对突加负载和输入电压波动两种情况的波形比较,展示了闭环系统相较于开环系统的优势与不足。 适合人群:具有一定电力电子基础知识和技术背景的研究人员、工程师或高校学生。 使用场景及目标:适用于希望深入了解正激式小功率开关电源工作原理及其控制策略的人群;旨在帮助读者掌握利用Matlab进行此类电路仿真的技能,提高解决实际工程问题的能力。 其他说明:文中不仅提供了详细的理论指导,还有具体的代码片段供参考,便于读者快速上手实践。同时,对于一些常见的仿真陷阱进行了提示,有助于避免不必要的错误。

    log4j-slf4j-impl-2.6.2.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    token-provider-1.0.1.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    NEMA 17 Stepper Motor 23mm

    NEMA 17 Stepper Motor 23mm

    COMSOL多孔介质流燃烧器模型:四场耦合非等温反应流仿真系统的构建与应用

    内容概要:本文详细介绍了基于COMSOL平台构建的多孔介质流燃烧器模型,该模型实现了层流流动、流体传热、浓物质传递和化学反应四大模块的四场耦合仿真。通过具体实例展示了各模块的关键设置和技术细节,如达西定律的应用、有效导热系数的计算、Maxwell-Stefan扩散模型的选择以及Arrhenius表达式的使用。此外,还强调了模型的高精度、收敛性和稳定性,特别是在处理不同可燃性气体(如CH4、H2、CO)时的表现。文中提到的分步求解策略和底层算法优化确保了复杂三维模拟的高效运行。 适用人群:从事燃烧仿真研究的专业人士,尤其是关注多物理场耦合仿真的科研人员和工程技术人员。 使用场景及目标:①用于研究多孔介质内的燃烧流动特性;②为相关领域的学术研究提供可靠的仿真工具;③帮助研究人员快速复现实验结果并进行深入分析。 其他说明:该模型不仅适用于专业研究人员,对于初学者来说也是一个很好的入门工具,通过案例教程可以在短时间内掌握基本操作并产出高质量的研究成果。

    基于OpenCV和Python的带UI界面车道线检测系统:从图像预处理到车道线叠加

    内容概要:本文详细介绍了基于OpenCV和Python的车道线检测系统的开发过程。该系统旨在确保自动驾驶车辆能够在车道线内安全行驶。整个系统分为多个关键步骤,包括图像加载、图像预处理(如灰度化和高斯滤波)、Canny边缘检测、区域检测、霍夫直线检测、直线拟合、车道线叠加以及图片和视频测试。最后,系统集成了一个基于PyQt5的可视化界面,使用户能方便地操作和调整参数。通过这些步骤,系统实现了高效的车道线检测和实时显示。 适合人群:对自动驾驶技术和计算机视觉感兴趣的开发者和技术爱好者,尤其是有一定Python和OpenCV基础的人群。 使用场景及目标:适用于研究和开发自动驾驶技术的团队和个人。目标是提供一种高效、准确的车道线检测方法,并通过友好的用户界面提升用户体验。 其他说明:该系统不仅可以用于静态图像的车道线检测,还能处理动态视频流,从而实现真正的实时检测。未来的工作将集中在进一步优化系统性能和增强用户体验。

    spring-boot-autoconfigure-2.4.7.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    jsch-0.1.54.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    基于ICA曲线峰值与高斯过程回归的电池SOH估算方法及其应用

    内容概要:本文详细介绍了基于ICA曲线峰值和高斯过程回归的电池SOH(State of Health)估算方法。首先,通过绘制电池容量增量曲线并进行卡尔曼滤波,提取出ICA曲线的峰值作为健康特征。接着,使用高斯过程回归建立电池状态估计模型,以ICA曲线峰值为输入,SOH为输出进行训练。该方法结合了电池充放电行为特征和先进机器学习技术,适用于电动汽车和移动设备的电池性能评估。文中还提供了具体的代码实现指导,包括数据预处理、IC曲线绘制、卡尔曼滤波和高斯过程回归模型的构建。 适合人群:从事电池管理系统研究的技术人员、电动汽车和移动设备制造商的研发人员、对电池健康管理感兴趣的科研工作者。 使用场景及目标:① 提供一种有效的电池SOH估算方法,提高电池性能评估的准确性;② 探索ICA曲线峰值与高斯过程回归在电池健康管理中的应用潜力;③ 为相关领域的研究人员提供实践案例和技术支持。 其他说明:该方法不仅有助于电池性能和寿命的评估与优化,也为未来的电池管理技术发展提供了新的思路。

    jetty-server-9.3.19.v20170502.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    log4j-slf4j-impl-2.12.4.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    多智能体系统分布式动态事件触发一致性控制:固定与切换拓扑的研究及其应用

    内容概要:本文探讨了多智能体系统(MAS)中固定及切换拓扑下的一致性控制问题,重点介绍了分布式动态事件触发一致性控制方法。首先解释了多智能体系统的概念及其重要性,接着详细阐述了固定和切换拓扑的区别及其对系统的影响。文中强调了一致性控制的目标是让各智能体状态趋于一致,以确保系统协同运作。分布式动态事件触发一致性控制通过智能体基于自身和邻近智能体的状态动态决策是否触发更新操作,减少了不必要的通信和计算开销,提高了系统的效率和稳定性。最后提供了简单的代码示例,展示了如何实现这种方法,并对未来的发展进行了展望。 适合人群:从事自动化控制、机器人技术、物联网等领域研究的专业人士,特别是关注多智能体系统及其控制策略的研究人员和技术开发者。 使用场景及目标:适用于需要优化多智能体系统性能、提升系统响应速度和降低能耗的实际应用场景,如无人机群控、智能交通管理、工业自动化等。目标是在不同环境条件下实现高效的多智能体协同作业。 其他说明:随着AI技术和IoT的发展,多智能体系统将在更多领域得到广泛应用,因此深入研究此类控制策略具有重要意义。

    kerby-xdr-1.0.1.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

Global site tag (gtag.js) - Google Analytics