WinSock IO模型

两种IO模式

  1. 阻塞模式:执行IO操作完成前会一直等待,不会将控制权交给程序,套接字默认IO模式。
  2. 非阻塞模式:执行IO操作时,WinSock函数会返回并交出控制权。没有运行完成就进行了返回,会不断返回WSAEWOULDBLOCK错误。

五种IO模型

  1. 选择模型
  2. 异步选择模型
  3. 事件选择
  4. 重叠IO
  5. 完成端口

原始IO模型

编写客户端和服务器,服务器有·主线程和多个子线程,主线程监听客户端的链接请求,当接收到某个客户端的连接请求后,创建一个专门用于和改客户端通信的套接字和辅助子线程,所有服务器和该客户端的交互都在这个辅助子线程内完成。
优点:直观
缺点:随着客户端的增多,线程爆炸,服务器频繁进行线程的切换,增大开销。

选择模型

对于原始IO模型的改进,使用一个数组或者列表,存放服务器与每个客户端的套接字,然后使用一个死循环对这个数组不断进行遍历询问时候有新的数据到来。
优点:避免了服务器线程频繁切换产生的额外开销
缺点:服务器有序的遍历,势必降低了其接收客户端请求的效率

异步选择模型

对于选择模型的改进,将不断询问变为被提醒,即每当IO完成时,Window会以消息的形式提醒服务器来接收数据。
优点:提高了客户端请求的效率
缺点:WsaAsyncSelect只限定于Window操作系统的使用

事件选择模型

思路与异步选择模型相同,区别在于通知程序的方式不同,异步选择模型采取的是以消息来通知服务器接收数据,而事件选择模型采取的是以事件来通知服务器接收数据。
优点:和异步选择相同
缺点:每次只能等待64个事件。

重叠IO模型

重叠指的是时间上的重叠,即进行IO操作时,还能进行其他操作,即异步非阻塞方式。发出IO请求时,会开辟一个新线程对IO请求进行处理并且立马返回,待其完成后主动通知程序进行下一步操作。
通知方式两种:

  1. 事件通知:完成后通过事件通知程序
  2. 完成例程:完成后通过回调函数执行相应的处理

优点:异步不阻塞,效率高
缺点:无法支持大量的IO请求,这样会是服务器进行频繁的线程上下文切换。

完成端口模型

系统使用线程池处理重叠IO,并且维护一个队列,使重叠IO完成后产生的时间通知放置队列中。
优点:应用程序可以管理成百上千的socket

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值