1

谁在执行阅读任务?是内核?任务在哪里排队?所有进程的队列都相同吗?

http://linux.die.net/man/3/aio_read

aio_read() 函数将由 aiocbp 指向的缓冲区描述的 I/O 请求排队。此函数是 read(2) 的异步模拟。

4

2 回答 2

3

内核应进程的请求启动 I/O 请求。该过程继续进行并执行其他操作。由于 I/O 通常比内存操作慢得多,这意味着该进程可以在读取完成之前做很多工作。I/O 异步完成,这意味着进程不会阻塞,不会在 I/O 子系统输出到磁盘并返回数据时无所事事。

打个比方:你吃饭的时候请朋友给你一杯水。当朋友拿水时,你继续吃。等朋友回来,你喝水。那是一杯水的异步输送。同步意味着你坐在桌旁什么都不做,什么也做不了,只能等待一杯水

于 2013-03-24T02:16:45.187 回答
0

据我了解,该任务由调用 aio_read 的进程执行。结果应该在您在原始调用中提供的返回缓冲区中排队。这意味着根据进程和尝试读取输出的套接字,即使它们同时运行也会有所不同,因为它们将具有不同的缓冲区要存储在其中。

希望这会有所帮助。有关其他信息,我将查看我在下面发布的 IBM Source

Asynchronous I/O is currently only supported for sockets. The aio_offset field may be set but it will be ignored.

IBM 资源

于 2013-03-23T18:45:57.953 回答