javaIO的AIO

一、AIO 基础定义

  • 全称:Asynchronous IO 异步非阻塞 IO
  • JDK7 正式引入,也叫 NIO.2
  • 核心:交给操作系统全权做 IO,做完主动回调通知程序

二、三种 IO 模型 核心本质(一句话区分)

  1. BIO 同步阻塞

    我去取快递,站门口死等,不取完不能干别的。

  2. NIO 同步非阻塞(多路复用)

    每隔一会去门口看一眼:快递到没到,没到就先干别的。

    (需要线程主动轮询 / Selector 监听事件)

  3. AIO 异步非阻塞

    填好收货电话,该干啥干啥,快递到了快递员主动打电话通知你


三、AIO 工作流程

  1. 应用程序发起异步读写请求,立刻返回,线程不阻塞
  2. 读写操作交给操作系统内核异步执行
  3. 内核利用 DMA 完成数据搬运、读写
  4. IO 操作彻底完成后,操作系统主动回调Java 程序
  5. 程序再去处理读完 / 写完的数据

核心差异:

  • NIO:程序主动问数据好了没
  • AIO:系统主动通知数据好了

四、AIO 核心类

  • 文件 AIO:AsynchronousFileChannel
  • 网络 AIO:AsynchronousSocketChannelAsynchronousServerSocketChannel
  • 两种使用方式:
    1. 回调函数 CompletionHandler
    2. Future 异步获取结果

五、AIO 优势

  1. 完全异步,线程资源利用率拉满
  2. 无需 Selector 轮询、无空轮询 Bug(NIO 痛点)
  3. 超高并发连接场景理论性能上限最高
  4. 结合 DMA + 内核异步,底层效率极致

六、致命缺点(为什么没人用)

  1. 操作系统支持有限

    Windows 完善支持,Linux 原生 AIO 实现很弱、兼容差

  2. 框架生态完全落后

    Netty、Redis、MQ、Nginx 清一色 NIO 多路复用

  3. 编程复杂度高、调试困难

  4. 业务极少需要「纯异步 IO」,NIO + 线程池完全够用

结论:Java 企业开发几乎不用原生 AIO,只做原理了解


七、BIO / NIO / AIO 终极对比

模型 同步 / 异步 阻塞 / 非阻塞 核心特点 适用场景
BIO 同步 阻塞 一连接一线程,编码简单 低并发、小项目
NIO 同步 非阻塞 (多路复用) 单线程管理多连接,轮询事件 高并发、中间件、Netty 底层
AIO 异步 非阻塞 内核异步回调,系统主动通知 理论高并发,实际基本不用

javaIO的AIO
http://hanqichuan.com/2026/04/20/java的IO/javaIO的AIO/
作者
韩启川
发布于
2026年4月20日
许可协议