← 学习中心

网络:IO 模型 BIO/NIO/AIO 与 Netty

阻塞/非阻塞、同步/异步的区别,BIO/NIO/AIO 适用场景,以及 Netty 的 Reactor 线程模型与零拷贝。

本节你将能

区分阻塞/非阻塞与同步/异步,说清 BIO/NIO/AIO 差异,并能讲清 Netty 为什么快。

核心要点

  • 阻塞/非阻塞看调用是否立即返回;同步/异步看数据就绪后由谁拷贝(内核通知 vs 自己读)。
  • BIO:一连接一线程,连接多时线程爆炸;NIO:多路复用(select/poll/epoll),单线程管海量连接。
  • AIO(NIO.2):真正异步,由 OS 完成 IO 后回调,适用于文件与大连接数。
  • Netty 用 Reactor 主从多线程:Boss 接连接、Worker 跑 IO;Pipeline + ChannelHandler 解耦。
  • 零拷贝:sendfile / FileChannel.transferTo 减少内核态与用户态拷贝;Netty 的 CompositeByteBuf、堆外内存。

面试连招

常被追问:select/poll/epoll 区别?Netty 为什么用堆外内存?粘包/拆包怎么解决?

常见坑

把 NIO 的「非阻塞」等同于「异步」;忽略 Netty 的 ByteBuf 引用计数导致内存泄漏。

网络:IO 模型 BIO/NIO/AIO 与 Netty | 必学必会