我想在我的程序中读取异步磁盘。
服务器上有很多硬盘,如果一个硬盘很慢,程序就会阻塞。我想打电话给异步。
如果我打电话:
打开(路径,O_NONBLOCK | O_RDONLY | O_DIRECT)
然后pread,然后pread使用最多8000微秒,但阻止我的程序。
是否可以在没有线程池的情况下启用异步磁盘读取?
答案 0 :(得分:5)
O_NONBLOCK
标志对普通文件没有任何影响(在大多数情况下至少是这样),因为它们不被认为是I / O可以阻塞的东西 - 是的它会阻塞一段时间用于从磁盘读取数据,但它不会像套接字或管道那样无限期地阻塞。
一个例外是当启用强制锁定时 - 锁定区域的读取或写入可能会无限期地阻塞(直到锁定被释放),O_NONBLOCK
将影响此类调用的行为。
关于在没有线程的情况下是否可以进行异步I / O,答案是肯定的(请参阅aio(7)
或io_setup(2)
,io_submit(2)
和朋友)但如果你看到我会感到惊讶从中受益匪浅。