重叠IO学习心得

转载 2006年05月17日 15:06:00
   想系统了解一下windows下面的几种IO模式,现在从重叠IO开始。

 

   先说事件通知的重叠IO,时间通知的重叠IO的好处就是写程序的时候可以先一股脑投递n个IO的请求,然后将每个OVERLAPPED结构与一个event对象相关联,再交给操作系统让它自己慢慢处理去。然后投递完所有的请求之后等待WaitForMultipleObjects返回(WaitForMultipleObjects返回了代表所有的IO操作都已经完成了),然后依次调用GetOverlappedResult来获得IO操作的信息(其实GetOverlappedResult也会等待IO操作完成,不过到这里已经完成了)。当然GetOverlappedResult之前在等待IO操作完成的时候程序还可以做些其他的事情。

 

   而重叠IO的另外一种模式就是异步过程调用,异步过程调用有点类似于创建线程函数createthread的做法,在读写操作的时候指定一个回调函数,读取完毕之后程序自动从回调函数入口点来执行(支持重叠IO的读写操作函数如readfile、WSARecv等都会有个参数指定回调函数入口点),这样把更多的操作放到重叠IO的处理函数中,主函数就可以腾出更多的时间干正事。

 

   不论是哪种模式,其实原理都是一样的,就是先把要读写的请求全部投递了,然后主程序可以一边做该做的事情一边来等待IO的完成,IO完成以后(WaitForMultipleObjects返回之后)再处理数据。

 

   套用一段《Win32多线程程序设计》里的话结尾:重叠IO可以让你要求操作系统为你传送数据,并且再传送完毕时通知你,它使你的程序在IO进行过程中仍然能够继续处理事务。事实上操作系统内部正是以线程来完成重叠IO。你可以获得线程的所有利益,而不需付出什么痛苦代价。

相关文章推荐

构造IOCTL命令的学习心得-----_IO, _IOR, _IOW, _IOWR 幻数的理解

在编写ioctl代码之前,需要选择对应不同命令的编号。为了防止对错误的设备使用正确的命令,命令号应该在系统范围内唯一,这种错误匹配并不是不会发生,程序可能发现自己正在试图对FIFO和audio等这类非...

java IO学习心得

File类: 在整个io包中,唯一表示与文件有关的类就是File类。使用File类可以进行创建或者删除文件等常用的操作。要想使用File类,则首先要观察File类的构造方法,此类的常用构造方法如下: ...

构造IOCTL命令的学习心得-----_IO, _IOR, _IOW, _IOWR 幻数的理解

在编写ioctl代码之前,需要选择对应不同命令的编号。为了防止对错误的设备使用正确的命令,命令号应该在系统范围内唯一,这种错误匹配并不是不会发生,程序可能发现自己正在试图对FIFO和audio等这类非...

关于构造IOCTL命令的学习心得-----_IO, _IOR, _IOW, _IOWR

在编写ioctl代码之前,需要选择对应不同命令的编号。为了防止对错误的设备使用正确的命令,命令号应该在系统范围内唯一,这种错误匹配并不是不会发生,程序可能发现自己正在试图对FIFO和audio等这类非...

达内Java学习心得之易犯错误

  • 2015年11月03日 10:14
  • 81KB
  • 下载

建模学习心得

  • 2015年08月03日 17:20
  • 15KB
  • 下载

Q-learning 学习心得

首先先说明一下强化学习的概念,通俗的讲,强化学习就是通过agent,也就是动作的发起者,对环境造成一个影响,环境接受该动作后状态发生变化,同时产生一个强化信号(奖或惩)反馈给Agent,Agent根据...

Hibernate学习心得

  • 2017年03月20日 22:28
  • 25KB
  • 下载

汇编 学习心得

  • 2017年10月30日 09:18
  • 57KB
  • 下载

Three.js的学习心得

这几天自己一直在瞎琢磨Three.j
  • sky311
  • sky311
  • 2014年09月12日 09:42
  • 682
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:重叠IO学习心得
举报原因:
原因补充:

(最多只允许输入30个字)