异步 I/O (Asynchronous I/O) 是 I/O 模型的“终极形态”。它实现了全过程非阻塞,将数据拷贝的工作也交给了内核。

核心逻辑

进程发起调用后立即返回,内核负责“等待数据”和“数据拷贝”两个阶段。完成后,内核主动通知进程。

  1. 全过程非阻塞:不仅等待数据不阻塞,数据拷贝过程也不阻塞
  2. 内核代劳:内核直接将数据搬运到用户指定的缓冲区(Buffer)。
  3. 通知机制:进程收到通知时,数据已经“躺”在内存里,可以直接处理。
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 实现。

类比:这是“外卖送上门”。你下单后该干嘛干嘛,外卖员(内核)不仅做好了饭,还亲自送到你桌上(拷贝到缓冲区)。你收到短信(通知)时,直接开吃即可。