Netty是大型架构核心,下面我详解Netty什么能抗百万连接@mikechen
Reactor 线程模型:减少线程开销
传统 BIO 模型中,一个连接通常对应一个线程。
连接数一旦增多,线程切换和资源占用就会迅速成为瓶颈。
而 Netty 采用的是 Reactor 线程模型,通过少量 EventLoop 线程管理大量连接事件。

把“一个连接一个线程”的低效模式,转变为“一个线程处理多个连接”的事件驱动模式。
这种设计的优势非常明显:
大幅降低线程创建与销毁成本;
减少上下文切换开销;
让 CPU 更专注于真正的业务处理。
因此,Netty 并不是靠“堆线程”来支撑高并发,而是通过合理的线程模型,让少量线程高效地服务大量连接。
NIO 与非阻塞 I/O:提升连接承载能力
Netty 基于 Java NIO 构建,核心是 Selector Channel Buffer 的非阻塞通信机制。
传统阻塞 IO 在读写数据时,线程会一直等待,造成资源浪费,而非阻塞 IO 则允许线程在没有事件时继续处理其他连接。

在百万连接场景下,真正的压力不在于“连接是否存在”,而在于“连接是否同时活跃”。
Netty 使用 NIO 后,Selector 可以监听成千上万个连接的读写事件。
只在有数据可读、可写或连接状态变化时才触发处理。这使得 Netty 能以较少的线程承载极高数量的 Socket 连接。
零拷贝:降低数据传输损耗
在网络通信中,数据在用户态与内核态之间频繁拷贝,会产生明显的性能损耗。
Netty 提供了多种 零拷贝(Zero-Copy) 机制,例如:

CompositeByteBuf:合并多个缓冲区,减少内存复制;
FileRegion:利用文件传输优化,减少数据搬运;
直接内存 DirectBuffer:减少 JVM 堆内存拷贝。
零拷贝的本质,是尽可能减少无意义的数据复制,把 CPU 和内存带宽留给真正的业务逻辑。在高并发环境中,这种优化对吞吐量和延迟都有非常重要的意义。
内存池与对象复用:减少 GC 压力
如果每次读写都频繁创建和回收对象,JVM 的垃圾回收(GC)就会成为性能瓶颈。
Netty 为此设计了 内存池化(Pooled ByteBuf) 和 对象复用 机制。

通过内存池,Netty 预先分配并管理缓冲区,避免频繁向 JVM 申请和释放内存。
通过对象复用,减少临时对象数量,从而降低 GC 频率和 STW(Stop-The-World)停顿时间。
对于百万连接系统来说,稳定性往往比单纯峰值性能更重要,而内存池正是保证稳定性的关键因素之一。