重叠IO学习心得

   想系统了解一下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。你可以获得线程的所有利益,而不需付出什么痛苦代价。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值