2012-11-28 59 views
3

假设我有一个C#线程做一些阻塞的IO,等待它完成。现在OS调度器给它CPU时间。它会马上给回还是只会被线程使用而无所作为? 或者也许是别的东西?等待IO的线程是否会阻塞CPU?

+1

如果一个线程被阻塞I/O,OS调度器不会给它任何CPU时间在所有 - 这就是原因99%在首位具有先发制人的调度程序 - 提供快速,高效的响应到I/O请求。请参阅@nanda答案。 –

回答

5

在Windows阻塞IO到任何设备(通过文件系统接口或其他人可访问的)的工作原理是有把手发送所述IO请求至与该设备相关联的驱动器,沿着一个事件对象,然后阻塞调用线程通过等待该事件对象。 (当驱动程序完成IO时,事件会发出信号)。因此,当线程阻塞IO时,它不会占用CPU,因为它只等待事件句柄。

所有阻塞IO API(S)的作品以这种方式与实现可能的细微差别。