POSIX AIO 与 Kernel AIO

1 简介

1.1 POSIX AIO

POSIX AIO 是一种标准的 AIO 模型,它利用了线程与线程之间的异步工作特性,在用户层中由用户线程模拟 I/O 的异步操作。

它有如下特点:

  • 可工作在所有 UNIX 系统下;
  • 可用于所有文件系统;
  • fd 可以置 O_DIRECT 标志,也可以不置这个标志;
  • 当线程I/O完成后,通过回调或者信号通知进程。

不过,正因为它是由多线程实现的,因此当线程数太多时会浪费时间(线程切换)。

1.2 Kernel AIO

Kernel AIO 是利用了 CPU 与 设备之间的异步工作特点,实现了内核级的异步I/O。

它有如下特点:

  • 在内核中维护着一个I/O请求队列。用户将某个I/O请求添加到其中,而内核则从这个I/O队列中取出请求然后处理;
  • 只适用于 Linux;
  • 并不对所有的文件系统适用;
  • fd 只能设置为 O_DIRECT 标志。

Reference