下载此文档

Windows异步IO和完成端口.docx


文档分类:IT计算机 | 页数:约5页 举报非法文档有奖
1/5
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/5 下载此文档
文档列表 文档介绍
Windows 异步 I/O 和完成端口上周做了一次关于 Windows 异步 I/O 和完成端口的部门技术分享,着重于理论介绍, 顺带 revie w 基于 IOCP 的网络库代码。完成端口是异步 I/O 的一种,将这两个并列作为标题,因为完成端口的复杂性及用途相比其他几种异步 I/O 加起来还过之。 Windows 核心编程中关于设备异步 I/O 介绍的很明白,这里再回顾一下。先区分两组概念: 同步/异步(Async/Sync) ,阻塞/ 非阻塞(blocking/non-blocking) 这两组概念很暧昧,有时可以不用分的很清楚。我将这两组概念分别定性为面向结果和面向过程。想象生活中排队的场景。印象中排队最痛苦的是 2010 那年在上海观看世博会,每进一个场馆要排上 2-5 个小时,而且天气燥热,排队过程中异常难耐。另外一种进场馆的方式就是凭预约票,可以在当天按票上时间段进场。排队进馆就是一种同步方式,直到队伍中轮到你才可以进去,凭票进馆则是异步方式,两种方式都是面向同一个结果:进馆。但是排队过程中,只能在队伍中等待,意味着行为失去自由,也就是阻塞,什么事也做不了,而凭票则可以在进馆之前到任何其他想去的地方,行动自由,也就是非阻塞的。从这个例子中可以看出为什么喜欢异步和非阻塞了,体现在程序中,则是它们的性能差别( 可以看这篇)。现在开始介绍异步 I/O 。一、请求异步 I/O 的条件任何异步 I/O 都需要有系统设施的支撑,正如取票进馆需要有预约票作凭证。请求异步 I/O 也需要两个基本条件:队列和重叠结构( OVERLAPPED ,重叠是指 I/O 请求的时间和线程执行其他任务的时间是重叠的)。 1typedef struct _OVERLAPPED { 2ULONG_PTR Internal; //I/O 请求错误码 3ULONG_PTR InternalHigh; //已传输字节数 4 DWORD Offset; //I/O 操作位置(低、高位),非文件设备忽略 5DWORD OffsetHigh; 6HANDLE hEvent; //内核事件对象或自定义结构 7}OVERLAPPED; 队列由设备驱动程序维护,记录 I/O 请求信息,其中包含数据地址和重叠结构的信息。正是这个队列和重叠结构,设备知道要将什么数据写到什么位置上去或从什么位置读取数据。并通知完成结果给程序。通知方式的不同决定了它们的性能差异,同样,每种方式都需要不同的系统设施支持。二、接收完成通知方式 1 、触发设备内核对象?工作机制线程触发一个异步 I/O 请求→设备内核对象被设为未触发状态→线程继续执行其他任务,直到某个点线程开始等待,设备完成 I/O 操作,设备内核对象被设为触发状态→程序收到 I/O 完成。?硬件设施设备内核对象(句柄)。?局限只能同时执行单个 I/O 请求。 2 、触发事件内核对象?工作机制线程设置事

Windows异步IO和完成端口 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数5
  • 收藏数0 收藏
  • 顶次数0
  • 上传人zbfc1172
  • 文件大小187 KB
  • 时间2017-05-19