WINDOWS系统对一个线程的I/O请求使用IRP结构来描述,IRP投递给I/O设备栈。
同步I/O:线程挂起,当设备内核处理I/O完成时唤醒
异步I/O:
1.线程通过更新重叠结构,取得I/O的操作结果,以此判断I/O是否完成。(参见重叠I/O相关)
2.当设备内核处理I/O完成时,激活设置在重叠结构内部的事件,唤醒线程(参见事件机制相关)
3.将IRP投递给线程的pending(未决) APC队列,等待线程进入Alertable状态来执行APC(参见APC相关)
4.将IRP投递给完成端口,等待完成端口分配工作线程来处理(参见完成端口相关)
IRP的生命期与投递线程相关联,异步I/O过程中,可以通过调用CancelIo来取消一个未决的I/O处理