双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

IOCP使用上的一点看法讨论。

Kevin_qing Kevin_qing 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
iocp的实现,在msdn和codeproject上面的例子都是创建一个iocp,然后所有socket加入该端口监视,n个工作线程全部等待同一个iocp对象。

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

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

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

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

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


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




...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
Kevin_qing
通信技术 4,397 成员 28,909 内容