关闭

重叠IO学习心得

2205人阅读 评论(0) 收藏 举报
   想系统了解一下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。你可以获得线程的所有利益,而不需付出什么痛苦代价。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:22163次
    • 积分:334
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:14篇
    • 译文:0篇
    • 评论:1条
    最新评论