等待IO的线程会阻塞CPU吗?

3
假设我有一个执行一些阻塞 IO 并等待完成的 C# 线程。现在操作系统调度器给了它 CPU 时间。它会立即返回吗,还是什么都不做并等待线程继续执行?或者可能完全不同的情况?

1
如果一个线程在I/O上被阻塞,操作系统调度程序将不会给它任何CPU时间 - 这正是拥有抢占式调度程序的99%原因 - 以提供快速和高效的响应I/O请求。请参见@nanda的答案。 - Martin James
1个回答

6
在Windows系统中,阻塞IO到任何设备(通过文件系统接口或其他方式访问)的工作方式是将IO请求发送到与设备关联的驱动程序,并附带一个事件对象句柄,然后通过等待该事件对象来阻塞调用线程。(当驱动程序完成IO时,事件会被标记为已发生)。因此,当线程执行阻塞IO时,它不会占用CPU,因为它只是在等待事件句柄。
所有阻塞IO API都是以这种方式工作的,可能在实现上存在细微差别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接