五种WinSock I/O模型的特点及比较

======    select  模型:  
                   
               select模型是WinSock中应用最广泛的模型之一,核心就是select函数,它可用于  
       判断套接字上是否存在数据,或者能否向一个套接字写入数据。  
               这个函数可以有效地防止应用程序在套接字处于阻塞模式中时,send或recv进入  
       阻塞状态;同时也可以防止产生大量的WSAEWOULDBLOCK错误  
                 select的优势是能够从当个线程的多个套接字上进行多重连接及I/O。  
       这就避免了伴随阻塞套接字和多重连接的线程剧增  
 
======    WSAAsyncSelect  模型:  
 
               这个是我个人最喜欢的一个模型^_^    因为它也是以消息为基础的。  
               关键就是WSAAsyncSelect函数,将socket消息发送到hWnd窗口上,然后在那里  
       处理相应的FD_READ,FD_WRITE等等消息  
       优点:  
               WSAAsyncSelect和WSAEventSelect模型提供了读写数据能力的异步通知,但他们不  
       提供异步数据传送,而重叠及完成大unkou提供异步数据的传送。  
               而且它可以在系统开销不大的情况下同时处理很多连接,而select模型还需要建立  
       fd_set结构。  
               缺点:  
               必须要使用一个窗口接收消息-_-b  
               如果处理成千上万的套接字就力不从心了  
 
======    WSAEventSelect  模型  
               这个也是以时间为基础的网络事件通知,但是与WSAAsyncSelect不同的是,  
       它主要是由事件对象句柄完成的,而不是通过窗口。  
               这个就有点复杂了,一句半句说不清...-_-b  
               优点:  
                   不需要窗口  
               缺点:  
                   每次只能等待64个事件,所以处理多个套接字时有必要组织一个线程池;  
                   所以伸缩性就不如后面的完成端口了  
 
======    重叠模型  
               这个模型可以使程序能达到更加的系统性能。基本设计原理就是让应用程序  
         使用重叠的数据结构,一次投递一个或多个I/O请求。针对这些提交的请求,  
         在他们完成之后,应用程序可为他们提供服务。  
               它又分为两种实现方法:在事件中使用,还有就是完成例程,每样都不是很好学-_-b  
 
======    完成端口  
               这个是所有里面最为复杂的I/O模型,楼主最好是在理解了重叠I/O的基础之  
       上再来学习。  
               完成端口提供了最好的伸缩性,往往可以使系统达到最好的性能,是处理  
       成千上万的套接字的首选。  
               从本质上说,完成端口模型要求创建一个windows完成端口对象,该对象通  
     过指定数量的线程,对重叠I/O请求进行管理,以便为已经完成的重叠I/O请求提供服务。  
 
         *  其只学这些纯理论的东西没什么意思,重要的是一定要多动手,看完一个模型  
   就亲自动手去实现一下看看,才能真正学会^_^
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值