overlapped I/O 重叠结构 一

以下是转载别人的文章 转载出处 http://blog.csdn.net/piggyxp/archive/2004/09/23/114883.aspx
 
 
目录:
1. 重叠模型的优点
2. 重叠模型的基本原理
3. 关于重叠模型的基础知识
4. 重叠模型的实现步骤
5. 多客户端情况的注意事项
 
 
一.             重叠模型的优点
1.      可以运行在支持 Winsock2 的所有 Windows 平台 , 而不像完成端口只是支持 NT 系统。
2.      比起阻塞、 select WSAAsyncSelect 以及 WSAEventSelect 等模型,重叠 I/O(Overlapped I/O) 模型使应用程序能达到更佳的系统性能。
         因为它和这 4 种模型不同的是,使用重叠模型的应用程序通知缓冲区收发系统直接使用数据,也就是说,如果应用程序投递了一个 10KB 大小的缓冲区来接收数据,且数据已经到达套接字,则该数据将直接被拷贝到投递的缓冲区。
而这 4 种模型种,数据到达并拷贝到单套接字接收缓冲区中,此时应用程序会被告知可以读入的容量。当应用程序调用接收函数之后,数据才从单套接字缓冲区拷贝到应用程序的缓冲区,差别就体现出来了。
3.      从《 windows 网络编程》中提供的试验结果中可以看到,在使用了 P4 1.7G Xero 处理器 (CPU 很强啊 ) 以及 768MB 的回应服务器中,最大可以处理 4 万多个 SOCKET 连接,在处理 1 2 千个连接的时候 CPU 占用率才 40% 左右 ―― 非常好的性能,已经直逼完成端口了 ^_^
        
 
二.             重叠模型的基本原理
      说了这么多的好处,你一定也跃跃欲试了吧,不过我们还是要先提一下重叠模型的基本原理。
      概括一点说,重叠模型是让应用程序使用重叠数据结构 (WSAOVERLAPPED) ,一次投递一个或多个 Winsock I/O 请求。针对这些提交的请求,在它们完成之后,应用程序会收到通知,于是就可以通过自己另外的代码来处理这些数据了。
      需要注意的是,有两个方法可以用来管理重叠 IO 请求的完成情况(就是说接到重叠操作完成的通知):
1.      事件对象通知 (event object notification)
2.      完成例程 (completion routines) , 注意,这里并不是完成端口
本文只是讲述如何来使用事件通知的的方法实现重叠 IO 模型, 完成例程的方法准备放到下一篇讲 :) ( 内容太多了,一篇写不完啊 ) ,如没有特殊说明,本文的重叠模型默认就是指的基于事件通知的重叠模型。
既然是基于事件通知,就要求将 Windows 事件对象与 WSAOVERLAPPED 结构关联在一起( WSAOVERLAPPED 结构中专门有对应的参数),通俗一点讲,就是。。。。对了,忘了说了,既然要使用重叠结构,我们常用的 send, sendto, recv, recvfrom 也都要被 WSASend, WSASendto, WSARecv, WSARecvFrom 替换掉了, 它们的用法我后面会讲到,这里只需要注意一点,它们的参数中都有一个 Overlapped 参数,我们可以假设是把我们的 WSARecv 这样的操作操作“绑定”到这个重叠结构上,提交一个请求,其他的事情就交给重叠结构去操心,而其中重叠结构又要与 Windows 的事件对象“绑定”在一起,这样我们调用完 WSARecv 以后就可以“坐享其成”,等到重叠操作完成以后,自然会有与之对应的事件来通知我们操作完成,然后我们就可以来根据重叠操作的结果取得我们想要德数据了。
      也许说了半天你还是不大明白,那就继续往后面看吧。。。。。。。 -_-b ,语言表达能力有限啊 ~~~
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值