javaIO的AIO
一、AIO 基础定义
- 全称:Asynchronous IO 异步非阻塞 IO
- JDK7 正式引入,也叫 NIO.2
- 核心:交给操作系统全权做 IO,做完主动回调通知程序
二、三种 IO 模型 核心本质(一句话区分)
BIO 同步阻塞
我去取快递,站门口死等,不取完不能干别的。
NIO 同步非阻塞(多路复用)
每隔一会去门口看一眼:快递到没到,没到就先干别的。
(需要线程主动轮询 / Selector 监听事件)
AIO 异步非阻塞
填好收货电话,该干啥干啥,快递到了快递员主动打电话通知你。
三、AIO 工作流程
- 应用程序发起异步读写请求,立刻返回,线程不阻塞
- 读写操作交给操作系统内核异步执行
- 内核利用 DMA 完成数据搬运、读写
- IO 操作彻底完成后,操作系统主动回调Java 程序
- 程序再去处理读完 / 写完的数据
核心差异:
- NIO:程序主动问数据好了没
- AIO:系统主动通知数据好了
四、AIO 核心类
- 文件 AIO:
AsynchronousFileChannel - 网络 AIO:
AsynchronousSocketChannel、AsynchronousServerSocketChannel - 两种使用方式:
- 回调函数
CompletionHandler - Future 异步获取结果
- 回调函数
五、AIO 优势
- 完全异步,线程资源利用率拉满
- 无需 Selector 轮询、无空轮询 Bug(NIO 痛点)
- 超高并发连接场景理论性能上限最高
- 结合 DMA + 内核异步,底层效率极致
六、致命缺点(为什么没人用)
操作系统支持有限
Windows 完善支持,Linux 原生 AIO 实现很弱、兼容差
框架生态完全落后
Netty、Redis、MQ、Nginx 清一色 NIO 多路复用
编程复杂度高、调试困难
业务极少需要「纯异步 IO」,NIO + 线程池完全够用
结论:Java 企业开发几乎不用原生 AIO,只做原理了解
七、BIO / NIO / AIO 终极对比
| 模型 | 同步 / 异步 | 阻塞 / 非阻塞 | 核心特点 | 适用场景 |
|---|---|---|---|---|
| BIO | 同步 | 阻塞 | 一连接一线程,编码简单 | 低并发、小项目 |
| NIO | 同步 | 非阻塞 (多路复用) | 单线程管理多连接,轮询事件 | 高并发、中间件、Netty 底层 |
| AIO | 异步 | 非阻塞 | 内核异步回调,系统主动通知 | 理论高并发,实际基本不用 |
javaIO的AIO
http://hanqichuan.com/2026/04/20/java的IO/javaIO的AIO/