本节摘要:读 Netty 源码按"事件循环 → 流水线 → 内存"的顺序三个模块各取一段主干即可;版本演进上 4.x 稳定、5.x 已放弃、4.2 与虚拟线程的融合是主线;横向对比 Mina、Vert.x、原生 AIO 后,能对"Netty 会不会被取代"形成自己的判断。
Netty 源码量大,但骨架极清晰。推荐只精读三段,每段都对应本教程的一个"口头结论",读完后结论变成证据:
第一段:NioEventLoop 的 run 循环(对应 6.1 的串行秩序)。看三件事——select 如何被定时任务的最晚到期时间修正;processSelectedKeys 处理就绪连接后如何进入任务消化;runAllTasks 如何按 ioRatio 截断。读完你会确信:一个 EventLoop 就是一张单线程日程表,没有隐藏的并发魔法。
第二段:AbstractChannelHandlerContext 的 fireChannelRead(对应 3.3 的传播)。顺着 invokeChannelRead 往下找 findContextInbound,看它如何跳过非 Inbound 工位、如何把执行投递回 EventLoop。重点是 pipeline().channel().eventLoop().inEventLoop() 的分支:调用线程在 EventLoop 上就直接调,否则包装成任务入队——线程归一的实现只有十来行。
第三段:AbstractReferenceCountedByteBuf 的 release(对应 4.1 的账本)。看 release0 如何用 CAS 把引用计数减一、归零时如何走 deallocate 钩子回到池。配合 4.2 的 PoolArena 代码,"借还账本"的全部实现一目了然。
读源码的方法论:带着本教程的问题去验证,而不是从第一行顺读;用 IDE 的调用栈打断点跟一次真实请求,比读十遍静态代码有效。

时间线上最值得咀嚼的是 5.x 的结局:官方投入多年后宣布放弃,理由直白——没有证明出来的收益,却带来了迁移成本与维护双线。这是基础设施演进的清醒样本:复杂性必须换来可度量的收益,否则不如不做。
JDK 21 转正的虚拟线程让"一连接一线程"的写法在成本上重新可行,于是"Netty 会被取代吗"成了高频问题。冷静拆解:
Executors.newVirtualThreadPerTaskExecutor(),既保留了同步写法的可读性,又不占 EventLoop。// 虚拟线程版慢业务剥离:与 6.2 的线程池方案对照 private static final ExecutorService VT = Executors.newVirtualThreadPerTaskExecutor(); // JDK 21+ protected void channelRead0(ChannelHandlerContext ctx, ImPacket pkt) { VT.execute(() -> { String result = slowRpcCall(pkt); // 阻塞写在虚拟线程上免费 ctx.writeAndFlush(result); // write 自动归一回 IO 线程 }); }
我的判断:中短期内 Netty 的地位不动摇,因为生态(9.1 的那串框架)与极限性能场景(网关、推送)都压在它上面;长期看,"IO 引擎 + 任意上层并发模型"的定位会让它活得更好,而不是更差。
| 维度 | Netty | Mina | Vert.x | 原生 NIO 或 AIO |
|---|---|---|---|---|
| 定位 | 网络框架底座 | 早期同类框架 | 响应式工具集 | JDK 自带 |
| 社区与生态 | 极活跃,事实标准 | 基本停滞 | 活跃,偏应用层 | 随 JDK 演进 |
| 内存管理 | 池化加引用计数 | 无同级方案 | 依赖底层 Netty | 手工 ByteBuffer |
| 学习曲线 | 中等偏陡 | 平缓 | 需接受响应式 | 陡且易错 |
| 适合场景 | 几乎所有高性能场景 | 历史项目维护 | 快速构建响应式服务 | 无依赖的极端场景 |
Mina 与 Netty 同源(Trustin Lee 先做 Mina 后做 Netty),被 Netty 全面超越后只剩维护;Vert.x 有意思的地方是它自己就构建在 Netty 之上——选它其实是选了一层响应式封装加一组应用工具;原生 AIO 在 Linux 上的内核支持长期不理想,这也是整个 JVM 生态倒向" epoll 加 Reactor"的历史原因之一。
⚠️ 常见坑:看到"虚拟线程时代来了"就把成熟的 Netty 服务重写成每连接一虚拟线程的阻塞模型——迁移成本、丢失的池化与协议栈、以及尚未充分验证的极端场景表现,都是代价。新范式先在新模块试点,别急着推翻在跑的车间。
💡 关键直觉:判断一个框架的前途,看三件事——它解决的问题是否还在、它的生态是否还在生长、它面对新范式是抵抗还是融合。Netty 三项全绿:性能问题常青、生态压满地基、虚拟线程以融合姿态接入。