我正在读这个tutorial异步磁盘文件io,但它并没有让我清楚,实际上让我更加困惑。io_submit和O_ASYNC文件有什么区别
有根据本教程中两个不同的异步IO模式:
- 异步非阻塞I/O:打开文件与O_ASYNC,然后使用epoll的/调查/选择。
- 异步IO:在该文章中使用glibc AIO。因为glibc的实现只是一个通过线程池的模拟,我在这个问题中提到的是kernel AIO,即io_submit。
在从概念至少点的观点,也没有大的区别,真正的,io_submit可以让你发出多个IO多个请求,而在另一方面,使用与O_ASYNC阅读,你可以只发出一个涉及文件位置的请求。
这guide还提到,使用epoll的作为替代的Linux AIO:
epoll的。 Linux有有限支持使用epoll作为 异步I/O的机制。对于以缓冲模式( ,没有O_DIRECT)打开的文件进行读取时,如果文件被打开为O_NONBLOCK,那么 读取将返回EAGAIN,直到相关部分在内存中。将 写入缓冲文件通常是立即执行的,因为它们是用 另一个写回线程写出的。然而,这些机制并没有给出直接I/O给出的I/O的控制级别。
使用epoll作为AIO替代品的问题是什么?换句话说,我们需要一个新的接口io_submit来解决什么问题?