b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

异步io 编程 《Windows核心编程》之“完成端口”(对所有IO都是如此(2)

电脑杂谈  发布时间:2018-02-09 04:47:04  来源:网络整理

When performing asynchronous device I/O, you must pass the address to an initialized OVERLAPPED

structure via the pOverlapped parameter. The word "overlapped" in this context means that the time

spent performing the I/O request overlaps the time your thread spends performing other tasks.

通俗点说就是:

1)OVERLAPPED是ReadFile/WriteFile等异步操作APIs的一个必须的实参(传址方式)。

2)“overlapped”的意思是执行IO请求的时间与线程执行其他任务的时间是重叠的(overlapped)。

再来看MSDN的说明:

Contains information used in asynchronous (oroverlapped) input and output (I/O).

链接:https://msdn.microsoft.com/en-us/library/windows/desktop/ms684342(v=vs.85).aspx

我们可以将OVERLAPPED理解为“与某个I/O请求关联的附加信息”。也有人将它理解为I/O请求的ID号,但我觉得“附加信息”更正确一点。事实上,在Jeffrey给的FileCopy.exe示例中,他对OVERLAPPED进行了扩展(继承),如下:

Jeffrey的这个扩展揭示了“异步IO请求”的本质 ——an OVERLAPPED structure and a data buffer。我们真正需要传输的就是这两个东西,其中OVERLAPPED作为标识,buffer才是真实的信息载体。当然,如果是同步IO,一次只能接收一个请求,就无需OVERLAPPED这个标识物啦,直接传NULL即可。

注:ReadFile/WriteFile只有一个buffer,但是DeviceIoControl有两个buffer —— 输入buffer和输出buffer。这个buffer是信息的载体,而不是信息,事实上,ReadFile的发出请求的时候,buffer为空,待请求处理完了,系统会将信息填充到该buffer上。

2,IO完成端口

IO完成端口是一个内核对象,它的作用是管理关联设备(Associated Devices)的异步IO请求的完成通知。这个话比较拗口,通俗点说,IO完成端口会监视与它管理的设备,如果该设备的某次异步IO请求被处理完了,系统会先把完成通知发给IO完成端口,IO完成端口再将收到的完成通知排队,然后去调度等待列表中的线程来最终收尾一个IO请求。

要理解IO完成端口的工作原理,就需要先搞清楚它的3个列表和2个队列,见《Windows核心编程》图10-4。

1)设备列表

包含所有与该IO完成端口关联的设备。

2)完成队列(先入先出)

IO完成端口将收到的系统发给他的IO完成通知存储在完成队列中。

什么是异步编程_异步编程社区_异步io 编程

3)等待线程队列(后入先出)

存储可供IO完成端口调度(选择)的线程。IO完成端口会在该队列中选择一个线程了处理一项完成通知。

4)已释放线程列表


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-68209-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...