专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 网络通信

IOCP使用上的一点看法讨论。该如何处理

发布时间:2011-07-03 07:16:00 文章来源:www.iduyao.cn 采编人员:星星草
IOCP使用上的一点看法讨论。
iocp的实现,在msdn和codeproject上面的例子都是创建一个iocp,然后所有socket加入该端口监视,n个工作线程全部等待同一个iocp对象。

这样做的坏处,对单个socket有多次io的情况,可能线程1收到第一次完成,线程2收到第2次完成。这里就存在一个包排序(例如2次都是read)或者需要锁定的情况。这样增加代码的复杂度,同时因为锁定,也会降低多线程下的性能。

而我的做法,是对每个线程建立一个iocp对象,并且该线程维护iocp监视的socket计数。

当有new connection时,选取计数值最小的iocp对象来监视该socket。

那么对于每个连接,上面的操作都简化为了单线程。只有在涉及到需要客户端交互时才需要有锁定操作。

同时,因为每个线程的连接数基本平均,负载上也比较均衡(假设每个客户端负载差不多的情况)。


大家的用法是什么样的,都来说说看






------解决方案--------------------
http://www.cppblog.com/oldworm/archive/2011/02/01/139662.html
------解决方案--------------------
首先建议看些开源的大项目,如sworld,mongoserver中对iocp的应用。

其次,对completeKey要有足够的认识。socket可以是key,此socket是广义的对socket的封装,包括消息队列etc。其锁是必须的,读/写有2个锁,如考虑大数据包操作,则需要有个计数器在socket内保证数据的完整和顺序。

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: