2

我想在我的程序中读取异步磁盘。

服务器上有很多硬盘,如果一个硬盘很慢,则程序阻塞。我想使呼叫异步。

如果我打电话:

打开(路径,O_NONBLOCK | O_RDONLY | O_DIRECT)

然后预读,然后预读最多使用 8000 微秒,但会阻止我的程序。

是否可以在没有线程池的情况下启用异步磁盘读取?

4

1 回答 1

5

O_NONBLOCK标志对普通文件没有任何影响(至少在大多数情况下),因为它们不被认为是 I/O 可以阻塞的东西 - 是的,它会阻塞从磁盘读取数据所花费的时间长度但它不会像套接字或管道那样无限期地阻塞。

一个例外是启用强制锁定时 - 锁定区域的读取或写入可能会无限期阻塞(直到锁定被释放),并且O_NONBLOCK会影响此类调用的行为方式。

至于在没有线程的情况下是否可以实现异步 I/O,答案是肯定的(请参阅aio(7)orio_setup(2)io_submit(2)朋友),但如果您从中受益匪浅,我会感到惊讶。

于 2013-04-04T10:27:54.060 回答