`

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教程并发编程

    ### Netty教程并发编程知识点详解 #### 一、Netty简介与并发模型基础 ##### 1.1 Netty概述 Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器与客户端。它提供了对TCP、...

    精通netty并发无加密视频

    netty讲的挺好的讲的挺好的讲的挺好的讲的挺好的 Netty是Java程序员进阶为高级和专家迈不过去的一道坎,是必须学习和掌握的一门技能。

    Netty 高并发深入浅出学习高并发服务器

    在高并发场景下,Netty 展现出强大的性能优势,使得它在分布式系统、微服务、云计算等领域广泛应用。 1. **Netty 的核心组件** - **BossGroup 和 WorkerGroup**:Netty 中的线程模型由 BossGroup 和 WorkerGroup ...

    netty并发服务器实例代码

    在Java领域,Netty因其强大的功能和高效性能而广受开发者喜爱,尤其适用于构建高度并发的网络服务,如聊天服务器、游戏服务器等。 在描述中提到的"netty并发服务器实例代码",意味着这个压缩包可能包含了使用Netty...

    JAVA版基于netty的物联网高并发智能网关.zip

    JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA...

    sprint boot整合netty5实现高并发websocket,不过netty5官网已经不推荐

    spring boot demo,整合netty5实现高并发websocket,并引入slf4g+lombok,采用maven形式; 直接导入运行,有测试页面也有实现代码及详细注释,src/main/webapps/TestNettyWebSocket.html里第十行改成 ws://localhost...

    Netty性能测试

    在“Netty性能测试”中,我们关注的是Netty在处理并发请求时的能力,以及它作为RPC(远程过程调用)框架的表现。 Netty 的高性能主要体现在以下几个方面: 1. **异步IO模型**:Netty采用了NIO(非阻塞I/O)模型,...

    Netty进阶之路-跟着案例学Netty

    《Netty进阶之路-跟着案例学Netty》是由知名技术专家李林峰撰写的一本专为Java开发者深入理解Netty框架而准备的书籍。这本书旨在通过实例教学,帮助读者全面掌握Netty的核心特性和实战技巧,提升网络编程的能力。 ...

    Netty案例集锦(并发编程篇)有目录

    `NioEventLoop`是Netty中实现Reactor模式的关键组件之一,它负责处理I/O事件,并调度相应的操作。主要包括以下几个方面: - **NioEventLoop介绍**:每个`NioEventLoop`都绑定到一个线程,用于处理该线程上的所有I/O...

    《Netty进阶之路 跟着案例学Netty》.rar

    Java进阶技术-netty进阶之路

    《Netty进阶之路 跟着案例学Netty》_李林锋_

    Netty进阶之路 跟着案例学Netty 整本书无密码,Netty进阶之路 跟着案例学Netty

    Netty进阶之路:跟着案例学Netty 完整版.pdf

    《Netty进阶之路:跟着案例学Netty》中的案例涵盖了Netty的启动和停止、内存、并发多线程、性能、可靠性、安全等方面,囊括了Netty绝大多数常用的功能及容易让人犯错的地方。在案例的分析过程中,还穿插讲解了Netty...

    Netty整合并发编程框架Disruptor实战百万长链接服务构建源码.zip

    Netty整合并发编程框架Disruptor实战百万长链接服务构建源码.zip Netty整合并发编程框架Disruptor实战百万长链接服务构建源码.zip Netty整合并发编程框架Disruptor实战百万长链接服务构建源码.zip

    【书籍学习】Netty、Redis、Zookeeper高并发实战-netty-redis-zookeeper.zip

    【书籍学习】Netty、Redis、Zookeeper高并发实战-netty-redis-zookeeper # netty-redis-zookeeper 【书籍学习】Netty、Redis、Zookeeper高并发实战

    netty-redis-zookeeper高并发实战学习-netty-redis-zookeeper.zip

    Netty的核心特性包括其NIO(非阻塞I/O)模型,使得它在处理大量并发连接时表现出色。它提供了高度优化的ByteBuf,用于高效的数据传输,并且支持多种编解码器,简化了网络通信的复杂性。此外,Netty的事件驱动架构...

    TestNettyProjects:Netty并发测试

    《深入探索Netty并发测试——基于TestNettyProjects项目》 Netty,作为一个高性能、异步事件驱动的网络应用框架,广泛应用于Java领域的高并发、低延迟的系统开发。本篇文章将围绕“TestNettyProjects”项目,深入...

    Netty案例集锦(并发编程篇).pdf

    本资料《Netty案例集锦(并发编程篇)》着重介绍了Netty在并发编程方面的应用,以下将详细阐述其中可能包含的知识点。 1. **Java NIO基础**:Netty基于Java NIO(非阻塞I/O)构建,NIO允许程序选择非阻塞方式读写数据...

    Java + Netty 实现的高并发高可用MQTT服务broker,轻松支持10万并发,已用于生产环境

    Java + Netty 实现的高并发高可用MQTT服务broker,轻松支持10万并发,已用于生产环境 技术体系:(使用 netty 实现通信及协议解析,使用 nutzboot 提供依赖注入及属性配置,使用 redis 实现消息缓存,集群,使用 ...

Global site tag (gtag.js) - Google Analytics