Unix - 异步读取(aio_read)

时间:2013-03-23 18:37:08

标签: c unix asynchronous

谁正在执行阅读任务?这是内核吗?任务排队的地方?所有进程的队列是否相同?

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

  

aio_read()函数对缓冲区描述的I / O请求进行排队   aiocbp指出。这个函数是异步模拟的   读(2)。

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.

IBM Source