假设我有一个C#线程正在做一些阻塞IO并等待它完成。现在OS调度程序为它提供了CPU时间。它会立即返回还是只是被线程无效使用? 或者也许完全不同的东西?
答案 0 :(得分:5)
在Windows上阻止IO到任何设备(可通过文件系统接口或其他设备访问)的工作原理是将IO请求发送到与设备关联的驱动程序,以及事件对象的句柄,然后通过以下方式阻止调用线程:等待那个事件对象。 (当驱动程序完成IO时,事件将发出信号)。因此,当一个线程阻塞IO时,它不会占用CPU,因为它只等待事件句柄。
所有阻塞IO API都以这种方式工作,可能在实现方面存在细微差别。