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