小编典典

POSIX异步I / O(AIO)的状态是什么?

linux

网上散布着许多页面,这些页面以不同的细节描述了POSIX AIO设备。它们都不是最新的。目前尚不清楚他们在描述什么。例如,这里的Linux内核异步I /
O支持
的“官方”(?)网站表示套接字不起作用,但是Ubuntu
8.04.1工作站上的“
aio.h”手册页似乎都暗示着它适用于任意文件描述符。然后还有另一个项目似乎可以在库层工作,甚至需要更少的文档。

我想知道:

  • POSIX AIO的目的是什么?鉴于我能找到的最明显的实现示例说它不支持套接字,所以整个事情对我来说很奇怪。它仅用于异步磁盘I / O吗?如果是这样,为什么要使用超通用API?如果不是,为什么磁盘I / O成为首先受到攻击的东西?
  • 我在哪里可以看到 完整的 POSIX AIO程序示例?
  • 有人真正使用过它吗?
  • 哪些平台支持POSIX AIO?他们支持哪一部分?有人真的支持<aio.h>似乎可以保证的隐含“任何FD的任何I / O” 吗?

我可以使用的其他多路复用机制非常好,但是随处可见的随机信息碎片使我感到好奇。


阅读 343

收藏
2020-06-02

共1个答案

小编典典

网络I / O并不是AIO的优先事项,因为编写POSIX网络服务器的每个人都使用基于事件的非阻塞方法。旧式的Java“数十亿个阻塞线程”方法令人毛骨悚然。

磁盘写I / O已经被缓冲,可以使用posix_fadvise之类的功能将磁盘读I / O预取到缓冲区中。这将直接的,无缓冲的磁盘I /
O留作AIO的唯一有用目的。

直接,无缓冲的I / O仅对事务数据库真正有用,并且那些数据库倾向于编写自己的线程或进程来管理其磁盘I / O。

因此,最后使POSIX AIO失去了 任何 有用的作用。不要使用它。

2020-06-02