以下是转载别人的文章 转载出处
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
,语言表达能力有限啊
~~~