我正在讀這個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來解決什麼問題?