首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IOCP关键截面设计

IOCP关键截面设计
EN

Stack Overflow用户
提问于 2014-01-06 04:15:14
回答 1查看 527关注 0票数 2

我正在运行一个完全可操作的IOCP TCP套接字应用程序。今天,我在考虑关键部分的设计,现在我有一个没完没了的问题在我的脑海中:全球还是每个客户的关键部分?我之所以谈到这一点,是因为在每个线程依赖于一个锁的情况下,使用多个工作线程是没有意义的,对吗?我是说..。现在,我没有看到100个同步客户端的性能问题,但是如果是10000呢?

我的共享资源是每个客户端预先分配的结构,因此,每个客户端都有您自己的IO上下文、套接字和其他内容。没有客户端间的资源共享,因此我认为这是使用每个客户端CS的另一个要点。我使用一个接受线程和8个(处理器* 2)工作线程。此应用程序是为小型(< 1KB)数据包设计的,但有时用于文件流。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-06 08:54:09

“正确”的答案可能取决于您的设计、并发客户端的数量以及您所需要的硬件性能。

总的来说,我发现最好的方法是使用最简单的方法,然后配置文件来定位热点。

然而..。您说您没有客户机间共享的资源,所以我假设您需要做的唯一同步就是“每个连接”状态。

因为它是每个连接,显而易见的(对我来说)设计将是每个连接状态包含它自己的关键部分。你认为这种方法的缺点是什么?

单个共享锁的问题是在没有理由阻止彼此的连接(和线程)之间引入争用。这将对性能产生不利影响,并可能随着连接数的增加而成为热点。

一旦您有了每个连接锁,您可能想避免尽可能频繁地使用它,只需让IOCP线程锁定,将完成情况放置在每个连接队列中进行处理。这样做的优点是允许单个IOCP线程在每个连接上工作,并防止单个连接上有额外的IOCP线程阻塞。它还能很好地处理“在成功时跳过完成端口”。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20942877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档