Max*_*hin 2 linux posix asynchronous file aio
我想在我的程序中读取异步磁盘.
服务器上有很多硬盘,如果一个硬盘很慢,程序就会阻塞.我想打电话异步.
如果我打电话:
打开(路径,O_NONBLOCK | O_RDONLY | O_DIRECT)
然后pread,然后pread使用最多8000微秒,但阻止我的程序.
是否可以在没有线程池的情况下启用异步磁盘读取?
该O_NONBLOCK标志对普通文件没有任何影响(在大多数情况下至少是这样),因为它们不被认为是I/O可以阻塞的东西 - 是的它会阻塞从磁盘读取数据所花费的时间长度但它不会像套接字或管道那样无限期地阻塞.
一个例外是当启用强制锁定时 - 然后读取或写入锁定区域可能会无限期地阻塞(直到锁定被释放)并且O_NONBLOCK将影响此类调用的行为方式.
至于异步I/O是否可能无绪,答案是肯定的(见aio(7)或者io_setup(2),io_submit(2)和朋友),但如果你从中看到多少好处我会感到惊讶.