提问人:torez233 提问时间:10/22/2023 最后编辑:torez233 更新时间:10/22/2023 访问量:26
大多数 I/O 操作本质上是异步的吗?
Are most I/O operations asynchronous in the nature?
问:
当我开始学习编程时,我学到的所有 I/O 功能,如读/读、写/写都是同步的(阻塞)。从那时起,我一直很好奇异步(非阻塞)I/O 的实际工作原理。
最近,我阅读了一些关于这个主题的材料,以下是我的理解:就 I/O 而言,内核实际上所做的是处理来自应用程序的请求,并向设备控制器发出请求。之后,可以自由地做其他事情,例如,将控制权转移回应用程序。当设备控制器收到请求时,它将自行执行实际的 I/O 操作(例如直接内存访问),而不会消耗任何 CPU 周期。操作完成后,设备控制器将通过硬件中断(或类似形式的信号)通知内核。
在整个过程中,唯一实际消耗 CPU 周期(例如阻塞)的部分是内核处理应用程序对相应设备的询问和发出请求。所以这样,所有常见的 I/O 操作本质上都应该是异步的,对吧?
对于这些同步 I/O 操作,我们可以轻松地基于异步版本构建同步版本。例如,在内核向设备发出请求后,内核可以简单地将应用程序进程标记为阻塞,以便进行 I/O 和上下文切换到其他进程,而不是将控制权转移回应用程序。只有在内核收到 I/O 操作完成的通知后,它才能切换回上一个进程。这样,从应用程序的角度来看,尽管 I/O 自然是非阻塞的,但 I/O 操作是阻塞的。
如果我的任何理解是错误的,请纠正我。感谢您的帮助
答: 暂无答案
评论