从最早的阻塞 IO 到如今高性能网络框架 Netty,Java IO 模型的演进代表了网络编程思想的一次次革命。

一、前置知识:用户态与内核态

  • 1.1 系统调用与上下文切换的代价
  • 1.2 同步/异步、阻塞/非阻塞的区分
  • 1.3 两对概念的交叉矩阵

二、BIO(Blocking IO)

  • 2.1 ServerSocket + Socket 的工作原理
  • 2.2 一连接一线程模型的弊端——C10K 问题
  • 2.3 线程池的缓解——但治标不治本
  • 2.4 BIO 的适用场景——连接数少、数据量大的场景

三、NIO(Non-blocking IO / New IO)

  • 3.1 Channel——双向通道,替代 Stream
  • 3.2 Buffer——position / limit / capacity 三剑客
  • 3.3 Selector——多路复用的核心
  • 3.4 select() / poll() / epoll() 系统调用对比
  • 3.5 NIO 编程的复杂性——就绪事件的循环处理

四、AIO(Asynchronous IO)

  • 4.1 基于回调的异步 IO
  • 4.2 AsynchronousServerSocketChannel 的使用
  • 4.3 AIO 为什么没有流行——Linux 实现不完善

五、Reactor 模型

  • 5.1 单 Reactor 单线程
  • 5.2 单 Reactor 多线程
  • 5.3 主从 Reactor 多线程——Netty 的实现
  • 5.4 每种模型的架构图

六、Netty 的核心设计

  • 6.1 Channel / EventLoop / EventLoopGroup
  • 6.2 Pipeline 与 ChannelHandler 责任链
  • 6.3 ByteBuf——Netty 的数据容器
  • 6.4 零拷贝——FileRegion / CompositeByteBuf

七、Netty 简单 Demo

  • 7.1 Echo Server / Client 的实现
  • 7.2 编解码器——StringEncoder / StringDecoder
  • 7.3 心跳检测——IdleStateHandler

八、总结

  • BIO → NIO → Netty 不仅是 API 的升级,更是编程模型的转变
  • 选择建议:绝大多数场景用 Netty,简单场景可用 BIO