gpt4 book ai didi

c++ - IOCP临界区设计

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:14 24 4
gpt4 key购买 nike

我正在运行一个完全可操作的 IOCP TCP 套接字应用程序。今天我在考虑关键部分的设计,现在我脑子里有一个没完没了的问题:全局还是每个客户端的关键部分?我之所以这样做是因为正如我所见,如果每个线程都依赖于一个锁,那么使用多个工作线程是没有意义的,对吗?我的意思是......现在我没有看到 100 个并发客户端有任何性能问题,但如果是 10000 个呢?

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

最佳答案

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

一般来说,我发现最好使用最简单的方法,然后进行分析以定位热点。

但是......你说你没有客户端间共享资源,所以我假设你需要做的唯一同步是围绕“每个连接”状态。

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

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

一旦您拥有每个连接锁,您可能希望通过让 IOCP 线程简单地锁定以将完成放入每个连接队列中进行处理来尽可能避免使用它。这样做的好处是允许单个 IOCP 线程在每个连接上工作,并防止单个连接被其他 IOCP 线程阻塞。它还适用于“成功时跳过完成端口”处理。

关于c++ - IOCP临界区设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20942877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com