windows下并发I/O服务器模型对比(一):5种并发I/O服务器模型

windows下并发I/O服务器模型对比

windows下有5种并发I/O服务器模型,罗列他们,并简述其优缺点。每一种更高级的模型,都是基于解决它的前一种模型的不足而诞生的。只有了解了他们之间的差别,才能理解他们的优缺点,才能更好地做出适合于产品与项目的选择。

由于本人学习时间也不长,下述有不当之处,还请路过的朋友不吝赐教。交流QQ 1010316426

(第1种)I/O复用

【关键词】: select
【优】:跨平台通用。由于是TCP/IP的标准功能,所以每一个OS平台都需要支持。因此如果想编写跨平台代码的话,只能选择select。
【缺】:1、要使用select,需要反复地设置FD_SET,还需要循环遍历地读取FD_SET,因此代码会显得较为繁琐。
2、select会从操作系统的用户层陷入内核层,这种陷入是比较消耗性能的。

(第2种)异步通知I/O

【关键词】:WSAEventSelect
【优】:可视作只需陷入内核层一次的select。
【缺】:由于需要操作系统绑定SOCKET和Event,因此需要开发人员编写代码维护SOCKET和Event的关联关系。
【备注】:1、本模型主要侧重于通知I/O事件的状态,而非I/O。
2、SOCKET被自动设置为非阻塞模式。
3、WSAEventSelect解决了select频繁陷入内核层而引起的性能问题。但并没有解决频繁读取I/O事件的问题。因为获取Event状态需要用到WSAWaitForMultipleEvents()。

(第3种)异步通知I/O

【关键词】:WSAAsyncSelect
【优】:
【缺】:
【备注】:1、WSAAsyncSelect一般用于界面开发。WSAAsyncSelect是让系统在有事件发生时发一个消息,WSAEventSelect是让系统在有事件发生时激活一个event内核对象。

(第4种)重叠I/O

【关键词】:WSASocket,WSASend,WSARecv,WSAOVERLAPPED
【优】:1、不需要开发人员维护Event和SOCKET的关联关系。
2、有两种通知I/O事件的方法:基于Event和基于回调(详见WSASend,WSARecv)。
【缺】:使用基于Event的通知,则需要调用WSAWaitForMultipleEvents(),使用基于回调的通知,则需要使线程处于alertable wait状态。这两处会影响I/O的性能。
【备注】:1、侧重于I/O处理。2、SOCKET必须设置为非阻塞模式。

(第5种)IOCP

【关键词】:CreateIoCompletionPort
【优】:1、使用多线程方式解决重叠I/O的两点不足之处。2、线程数关联于CPU数,性能优良。
【缺】:不好理解。
【备注】:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值