Netty线程模型

Java开发中Netty线程模型原理解析! Java开发中Netty线程模型原理解析,Netty是Java领域有名的开源网络库具有高性能和高扩展性的特点,很多流行的框架都是基于它来构建。Netty 线程模型不是一成不变的,取决于用户的启动参数配置。通过设置不同的启动参数Netty ,可同时支持 Reactor 单线程模型、多线程模型。 Netty线程模型就是Reactor模式的实现,如图: 一、线程组 Netty抽象了两组线程池BossGroup和WorkerGroup,其类型都是NioEventLoopGroup,BossGroup用来接受客户端 阅读详情

Netty解决的问题

  • NIO 的类库和 API 繁杂, 使用麻烦: 需要熟练掌握Selector、 ServerSocketChannel、
    SocketChannel、 ByteBuffer等。
  • 开发工作量和难度都非常大: 例如客户端面临断连重连、 网络闪断、心跳处理、半包读写、 网络拥塞 和异常流的处理等等。
  • Netty 对 JDK 自带的 NIO 的 API 进行了良好的封装,解决了上述问题。且Netty拥有高性能、 吞吐 量更高,延迟更低,减少资源消耗,最小化不必要的内存复制等优点。
  • Netty 现在都在用的是4.x,5.x版本已经废弃,Netty 4.x 需要JDK 6以上版本支持

Netty的使用场景

  1. 互联网行业:在分布式系统中,各个节点之间需要远程服务调用,高性能的 RPC 框架必不可少, Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。典型的应用有:阿 里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现。各进程节点之间的内部通信。Rocketmq底层也是用的Netty作 为基础通信组件。
  2. 游戏行业:无论是手游服务端还是大型的网络游戏,Java 语言得到了越来越广泛的应用。Netty 作为高性能的基础通信组件,它本身提供了 TCP/UDP 和 HTTP 协议栈。
  3. 大数据领域:经典的 Hadoop 的高性能通信和序列化组件 Avro 的 RPC 框架,默认采用 Netty 进行跨界点通信,它的 Netty Service 基于 Netty 框架二次封装实现。 netty相关开源项目:https://netty.io/wiki/related-projects.html

Netty线程模型

在这里插入图片描述
模型解释

  1. Netty 抽象出两组线程池BossGroup和WorkerGroup,BossGroup专门负责接收客户端的连接, WorkerGroup专门负责网络的读写
  2. BossGroup和WorkerGroup类型都是NioEventLoopGroup
  3. NioEventLoopGroup 相当于一个事件循环线程组, 这个组中含有多个事件循环线程 , 每一个事件 循环线程是NioEventLoop
  4. 每个NioEventLoop都有一个selector , 用于监听注册在其上的socketChannel的网络通讯
  5. 每个Boss NioEventLoop线程内部循环执行的步骤有3 步:
    • 处理accept事件 , 与client 建立连接 , 生成 NioSocketChannel
    • 将NioSocketChannel注册到某个worker NIOEventLoop上的selector
    • 处理任务队列的任务 , 即runAllTasks
  6. 每个worker NIOEventLoop线程循环执行的步骤
    • 轮询注册到自己selector上的所有NioSocketChannel 的read, write事件
    • 处理 I/O 事件, 即read , write 事件, 在对应NioSocketChannel 处理业务
    • runAllTasks处理任务队列TaskQueue的任务 ,一些耗时的业务处理一般可以放入
      TaskQueue中慢慢处理,这样不影响数据在 pipeline 中的流动处理
  7. 每个worker NIOEventLoop处理NioSocketChannel业务时,会使用 pipeline (管道),管道中维护 了很多 handler 处理器用来处理 channel 中的数据

ByteBuf详解

从结构上来说,ByteBuf 由一串字节数组构成。数组中每个字节用来存放信息。
ByteBuf 提供了两个索引,一个用于读取数据,一个用于写入数据。这两个索引通过在字节数 组中移动,来定位需要读或者写信息的位置。
当从 ByteBuf 读取时,它的 readerIndex(读索引)将会根据读取的字节数递增。 同样,当写 ByteBuf 时,它的 writerIndex 也会根据写入的字节数进行递增。
在这里插入图片描述
需要注意的是极限的情况是 readerIndex 刚好读到了 writerIndex 写入的地方。
如果 readerIndex 超过了 writerIndex 的时候,Netty 会抛出 IndexOutOf-BoundsException 异常。

深入解析 Netty 的线程模型 Netty 的线程模型通过巧妙地结合和优化传统的线程处理方式,提供了一种高效、灵活且可扩展的解决方案,适用于各种高并发的网络应用场景。理解和选择合适的线程模型对于构建高性能的网络应用至关重要。我是马丁,一名专注于网络编程技术的开发者,经常在 优快云 平台分享技术心得。希望本文能对您有所帮助,欢迎大家三连加关注,一起交流探讨更多技术话题! 阅读详情

相关推荐

[netty]--Reactor线程模型以及在netty中的应用

说道netty的线程模型,我们第一反应就是经典的Reactor线程模型,下面我们就来一起探讨一下三种经典的Reactor线程模型: 这里我们需要理解的一点是Reactor线程模型是基于同步非阻塞IO实现的。对于异步非阻塞IO的实现是Proactor模型。 本文主要包括 (1)Reactor单线程模型 (2)Reactor多线程模型 (3)主从Reacto

惜暮 8334

Netty源码分析(二) - 线程组

@Author:zxw @Email:502513206@qq.com 目录 Netty源码分析(一) - 线程声明周期​ 1.示例代码 在看源码前,首先看看测试用的代码,这边为了方便测试,没有使用NioEventLoop,不过底层都是使用的父类方法,并不影响。 public static void main(String[] args) { EventLoopGroup group = new DefaultEventLoopGroup(2); TestRunner

V_zxw的博客 640

Netty线程模型总结

netty是一个异步的,事件驱动的基于NIO的高性能的网络应用程序框架,下面主要看看netty的线程模型. Netty线程模型 netty的线程模型是基于reactor模式的一种实现 如果服务只需要绑定一个端口(比如8888),那么boss线程只需要一个线程,如果有多个才需要多个线程,一个NioEventLoop负责一个端口 服务启动时会创建两个线程组 bossGroup 和 work...

码云 649

netty中的线程组到底什么意思

netty中的线程组到底什么意思

大连赵哥的博客 417

深入了解AES_GCM算法

常见的对称加密算法,在解密过程中无法确认密钥是否正确的。这就意味着,密文可以用任何密钥执行解密运算,得到一组疑似密文;由于不知道密钥是否正确,故也不能确定解密出来的明文数据是否正确。因此,需要在对称加密算法上增加一层验证机制,常见思路为使用加密算法进行加密保证机密性,使用摘要算法计算MAC保证完整性和真实性,这就涉及到摘要计算和加密计算的前后顺序和参与计算的数据、密钥等,使用起来略微麻烦。

huaqianzkh的专栏 4189

别再被骚扰了!手把手教你彻底卸载阿里云盾(安骑士)并封禁其IP段

本文详细指导如何彻底卸载阿里云盾(安骑士)并封禁其IP段,帮助用户夺回服务器控制权。从识别监控组件到执行官方卸载脚本,再到手动清理残留文件和配置iptables规则,确保完全阻断云盾通信。适用于追求极致性能或需要完全自主控制的环境。

weixin_42525551的博客 452

009 netty实践_多worker线程组模式(实际生产中高性能应用netty)

Netty框架的工作原理 1. 基本过程描述如下 1)初始化创建 2 个 NioEventLoopGroup:其中 boosGroup 用于 Accetpt 连接建立事件并分发请求,workerGroup 用于处理 I/O 读写事件和业务逻辑。 2)基于 ServerBootstrap(服务端启动引导类):配置 EventLoopGroup、Channel 类型,连接参数、配置...

诸般世界 2346

远红外热传感器阵列 (32x24 RES) MLX90640ESF-BAA/BAB

Melexis MLX90640是一款小体积、低成本的完全校准的32x24像素红外阵列,采用行业标准,带数字接口。3.其工作温度范围为 -40°C 至 85°C,可测量的物体温度范围为 -40°C 至 300°C。该红外传感器在整个测量范围内保持高精度水平,可提供 ±1°C 的典型目标物体温度精度。2.这款 32x24 像素的器件适用于安全和便利应用,包括防火系统、智能楼宇、智能照明、IP/监控摄像机、HVAC 设备和车辆座椅占用检测。1.工作温度范围为 -40 至 85°C,可在严苛的工业环境中部署。

Summit__的博客 2001

netty worker线程数量_一起学习一下 Netty 的线程模型

要想开发一个高性能的TCP服务器,熟悉所使用框架的线程模型非常重要。Netty本身都是高性能的网络框架,如果再搭配上高效率的代码,才能实现一个高大上的服务器。但是如果不了解它们的线程模型,就很难写出高性能的代码。框架本身效率再高,程序写的太差,那么服务器整体的性能也不会太高。就像一个电脑,CPU再好,内存小硬盘慢散热差,整体的性能也不会太高。玩过Android开发的同学会知道,在Andr...

weixin_39897758的博客 2062

从源码编译CesiumForUnreal

从源码编译CesiumForUnreal插件

专注GIS开发 5644

openbmc mctp i3c适配步骤

本文介绍了在Intel OKS平台下,BMC作为I3C从设备如何适配MCTP over I3C的实现方法。主要内容包括:1)关键术语解释,如MDB(Mandatory Data Byte)值为0xAE,DCR(Device Characteristics Register)和BCR(Bus Characteristics Register)的设置;2)适配流程说明,包括BMC作为控制器主节点分配地址后成为MCTP端点,CPU作为总线所有者的角色转换;3)测试验证步骤,展示通过mctp-client工具发送指

wit_yuan的专栏 132

Netty—Reactor线程模型详解

Netty线程模型就是基于Reactor线程模型的改进,它也是Netty中个人认为是最重要的一个知识点,在我看来只有掌握了Netty线程模型才算是真正意义上的理解了Netty!!

qq_65377318的博客 2098

七天征服AutoSAR/SomeIP_04理解SoAD_LdCom_SD模块

本文深入解析了AUTOSAR平台下SOME/IP协议栈的架构设计与模块交互逻辑。重点剖析了SD模块(服务发现)和LdCom模块(通信适配层)与SoAD(Socket适配层)之间的复杂关联关系。文章通过详细配置表格和代码示例,阐述了服务注册发现机制、PDU路由控制策略、数据收发流程等核心功能,并形象地将三模块关系类比为"三极管结构"。特别强调了SD模块通过RoutingGroup实现通信路径的动态开关控制,以及LdCom模块在协议栈中的透传转发作用,帮助开发者理解配置规则背后的底层原理,提

大叔带刺的博客 197

Netty的线程模型

Netty是一个基于NIO(非阻塞I/O)的客户端-服务器框架,它使用Reactor模式来实现高并发处理。Netty的线程模型是其高性能、高并发处理能力的重要支撑。

猪猪 2250

SAP S/4 HANA CO 成本模块实战指南

摘要:SAP S/4HANA CO(管理会计)模块是企业内部成本管理的核心工具。本文系统介绍了CO模块的组织结构(控制范围与会计科目表映射)、基础概念(计划值与预算值)以及6大子模块功能(成本要素、成本中心会计等)。重点解析了各子模块的应用场景与差异,包括成本归集、费用分摊、利润分析和产品成本控制,并对比了利润中心与成本中心、内部订单与销售订单的区别。通过事务代码示例和功能对比表,帮助用户快速掌握SAP CO模块的核心管理逻辑与实施要点。

金牌架构师 1125

上位机图像处理和嵌入式模块部署(qmacvisual入门)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 虽然我们前面学习了很多的知识点,比如说在windows这边,用qt写界面,用opencv写图像处理代码;在linux这边先用树莓派测试,最后再部署到自己的平台上面。但是,对于一个商业软件是怎么运行的,很多时候我们心理还是没有底,或者说,自己写的软件距离一个商业软件还有多远,大部分学习的同学是不知道的。 就算有的同学说,这个时候可以借鉴一下vision pro,或者是

嵌入式-老费,一个分享专业嵌入式知识的blog 1229

Netty系列之Netty线程模型

1. 背景 1.1. Java线程模型的演进 1.1.1. 单线程 时间回到十几年前,那时主流的CPU都还是单核(除了商用高性能的小机),CPU的核心频率是机器最重要的指标之一。 在Java领域当时比较流行的是单线程编程,对于CPU密集型的应用程序而言,频繁的通过多线程进行协作和抢占时间片反而会降低性能。 1.1.2. 多线程 随着硬件性能的提升,CPU的核数越来越越多,很多服务器标配

xiaolang85的专栏 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Netty篇】Netty的线程模型

Netty 的线程模型就像一个高效的餐厅管理系统,可以帮助你构建高性能、高可靠性的网络应用。虽然有一定的学习成本,但只要掌握了它的原理和使用方法,就能让你的应用如虎添翼,生意兴隆!💯 😊。

qq_56158663的博客 1329

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

彻底搞懂Netty的线程模型

前言 Netty是基于异步的事件驱动的高性能网络框架和工具,常见的分布式中间件底层都有涉及到Netty。 要学习netty线程模型,先了解三种IO模型,这样理解netty线程模型和IO模型更轻松。 BIO 同步阻塞IO模型 一个线程负责连接,多线程则为每一个接入开启一个线程一个请求一个应答请求之后应答之前客户端会一直阻塞 NIO 同步非阻塞I/O 基于IO多路复用技术的“非阻塞同步”IO模型。简单来说,内核将可读可写事件通知应用,由应用主动发起读写操作; AIO 异步非阻塞IO,AIO 引入异步通道的

4112

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【Netty】Netty的线程模型及简单用法

Netty的线程模型 Reactor模型 Netty的模型就是基于Reactor(反应堆)模式实现的,所以一定要先认识下Reactor。 Reactor模型也叫Dispatch(派遣)模型。当一个或多个请求同时传给服务端,服务端将它们同步分派给各个请求的处理线程。 Reactor模型的三种角色 Acceptor:处理客户端新连接,并分配请求到处理链中 Reactor:负责监听和分配事件,将I/O事件分配给对应的Handler Handler:事件处理,如编码、业务处理、解码等 Reactor的线程模型

L_MaFia的博客 543

netty 线程模型

Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo、Rocketmq、Hadoop等。本文就netty线程模型展开分析讨论下 首先先看IO模型: BIO:同步阻塞IO模型; NIO:基于IO多路复用技术的“非阻塞同步”IO模型。简单来说,内核将可读可写事件通知应用,由应用主动发起读写操作; AIO:非阻塞异步IO模型。简单来说,内核将读完成事件通知应用,读操作由内核完成,应用只需操作数据即可;应用做异步写操作时立即返回,内核会进

qq_22162093的博客 505

Netty-02线程模型

Netty采用Reactor线程模型实现高性能网络通信,其核心是Boss-Worker线程架构。Boss线程组负责接收连接请求,Worker线程组处理数据读写,通过事件驱动机制实现非阻塞IO。EventLoop组件包含选择器、任务队列和定时任务队列,采用ioRatio参数平衡IO和任务处理时间。该模型通过线程分工和异步处理机制,有效提升并发性能,同时避免传统阻塞IO的线程资源浪费问题。

d3y1`5 81_09 1165

Netty-NIO线程模型

IO多路复用地层主要用的Linux内核函数(select,poll,epoll)来实现,windows不支持epoll实现,windows底层基于winsock2的select函数实现的(不开源)。Epoll的事件轮询就是基于这三个底层函数来实现的(epoll_create、 epoll_wait、 epoll_ctl)事件通知方式,每当有IO事件就绪,系统注册的回调函数就会被调用,事件复杂度O(1)Linux版本的Redis底层的通信就是基于epoll的事件轮询机制实现的。

Java就是我的道! 933

Netty从0到1系列之Netty线程模型【上】

Netty线程模型【上】摘要: 本文深入解析了Reactor线程模型,重点介绍了单线程模型实现。单线程Reactor模型中,所有I/O操作(连接建立、读写处理)都在单个线程内完成,通过Selector实现事件多路复用。核心组件包括Reactor(事件监听与分发)、Acceptor(处理连接)和Handler(处理业务)。文章通过流程图、时序图展示了单线程模型的工作机制,并提供了Java NIO实现代码示例。该模型虽然简单,但存在性能瓶颈,适用于低并发场景。后续文章将介绍多线程模型优化方案。

编程技术圈 884
上一篇: java IO模型详解
下一篇: java项目使用Sonar进行质量管理(最新版-增量代码扫描)
鲫鱼哥
博客等级 码龄10年 18粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值