异步 I/O (Asynchronous I/O) 是 I/O 模型的“终极形态”。它实现了全过程非阻塞,将数据拷贝的工作也交给了内核。
核心逻辑
进程发起调用后立即返回,内核负责“等待数据”和“数据拷贝”两个阶段。完成后,内核主动通知进程。
- 全过程非阻塞:不仅等待数据不阻塞,数据拷贝过程也不阻塞。
- 内核代劳:内核直接将数据搬运到用户指定的缓冲区(Buffer)。
- 通知机制:进程收到通知时,数据已经“躺”在内存里,可以直接处理。
sequenceDiagram participant U as 用户进程 participant K as 内核 (Kernel) U->>K: aio_read (指定缓冲区) K-->>U: 立即返回 Note over U: 执行其他任务 Note over K: 阶段 1: 等待数据 Note over K: 阶段 2: 拷贝数据到用户缓冲区 K->>U: 通知 (信号/回调) Note over U: 直接处理缓冲区数据
现状与演进
- Linux 的遗憾:原生 AIO 长期仅支持磁盘文件,不支持网络。
- Linux 的救星:2019 年引入的 io_uring 真正实现了高性能的网络异步 I/O。
- Windows 的骄傲:IOCP 是极其成熟的异步 I/O 实现。
类比:这是“外卖送上门”。你下单后该干嘛干嘛,外卖员(内核)不仅做好了饭,还亲自送到你桌上(拷贝到缓冲区)。你收到短信(通知)时,直接开吃即可。