Netty 线程模型详解:从演进的角度看源码设计

本文深入探讨Netty的线程模型,从单线程模型到多线程主从模式的演进,详细分析了Netty中的EventLoopGroup、NioEventLoop等关键类的职责和实现。通过源码解析,揭示了Netty线程模型设计的自然演进过程和内在逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

从这篇文章开始,开始进入源码分析阶段。在之前的入门篇和实战篇中,通过代码的编写和各种特性的讲解,让我们对 Netty 有了充分的感性认知。那么接下来,通过对代码的详细走读,来细细查看哪些在感性直觉背后的实现原理。

Netty 的线程模型

Netty 的线程模型其实没有什么太特别的地方,属于比较自然而然的设计。

首先,基于 Selector 可以同时监控多个链接的特性,很容易想到将所有通道都注册到一个 selector 对象,然后死循环获取通道上的就绪事件并且进行处理。这就是最朴素的设计,也就是作为的单线程模型。这种模式,比较适合客户端,用于服务端的话,因为线程数太少,无法有效的利用多核 CPU 的处理能力。

单线程无法有效的利用 CPU,而且在一个 Selector 上管理太多的链接,效率也会下降。很自然的想到利用多线程提升效率。如何使用多线程按照不同的方向扩展又有所区分。单线程模式中的点在于两个:

  • 单个 Selector 关注了太多链接,导致一次取出的集合可能很大,遍历耗时太多;
  • 所有的链接事件都在一个线程中处理,处理完才能处理下一个链接,导致在后面的链接长时间的等待。

根据这两点,对应的也有两种扩展模式。

模式一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值