操作系统是如何为async io发送io完成消息的?

本文关键字:io 消息 发送 操作系统 async | 更新日期: 2023-09-27 18:17:27

IO完成端口需要在异步IO完成时发出信号。这可以通过用户手动调用PostQueuedCompletionStatus来完成,也可以在异步IO完成时由操作系统自动执行。操作系统是如何自动完成的,在哪个线程上?在这种场景下,磁盘驱动器和操作系统之间的通信究竟是如何进行的?

我尝试在visual studio中调试对FileStream的调用时设置PostQueuedCompletionStatus的断点。ReadAsync,但从未命中。

操作系统是如何为async io发送io完成消息的?

操作系统将向与完成端口相关联的一个线程提供状态。这意味着为该端口调用GetQueuedCompletionStatus()的任何线程。

正如Harry指出的,IO完成事件的排队是由windows内核处理的。当IO完成时,磁盘发送一个由操作系统处理的中断。操作系统处理程序假定将完成消息排队到适当的IOCP。