谁正在执行阅读任务?这是内核吗?任务排队的地方?所有进程的队列是否相同?
http://linux.die.net/man/3/aio_read
aio_read()函数对缓冲区描述的I / O请求进行排队 aiocbp指出。这个函数是异步模拟的 读(2)。
答案 0 :(得分:3)
内核在进程请求时启动I / O请求。这个过程进行并做其他事情。由于I / O通常比内存操作慢得多,这意味着在读取完成之前,该过程可以做很多工作。 I / O以异步方式完成,这意味着进程不会阻塞,在I / O子系统转出磁盘并返回数据时不会无所事事。
一个类比是:你在吃东西时要求朋友给你一杯水。当朋友得到水时,你继续吃。当朋友稍后回来时,你会喝水。那是异步输送一杯水。同步意味着你坐在桌子上什么都不做,除了等待一杯水之外别无能为力
答案 1 :(得分: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.