gpt4 book ai didi

nservicebus - 最佳线程数 NServiceBus

转载 作者:行者123 更新时间:2023-12-01 10:58:58 30 4
gpt4 key购买 nike

我们正试图找出用于我们的 NServiceBus 服务的最佳线程数。我们在一台有 2 个四核的机器上运行它。我们在队列备份方面遇到了问题。我们从 100 个线程开始,然后增加到 200 个,事情变得更糟了。我们将它降低到 75,然后是 50,它似乎更好。是否有一些基于我们拥有多少 CPU 的最佳数量,或者我们应该使用一些经验法则来确定要运行的线程数?

最佳答案

您运行的每个线程都有附加的开销。如果你有 2 个四核,那么你将能够同时运行 8 个线程。每个线程将消耗一个核心。

如果您有超过 8 个线程,那么您可能会开始做更少的有用工作,而不是更多。这是因为每次 Windows 决定让当前未消耗核心的线程之一轮流做某事时,它需要存储其中一个正在运行的线程的状态,然后恢复即将运行的线程的旧状态 -然后让线程继续下去。如果您有大量线程,您将花费大量时间在线程之间切换而无所事事。

如果你有一堆线程被阻塞等待 IO(例如一条消息完成写入磁盘以便它可以被获取)那么你可能能够运行比你有核心更多的线程并且仍然得到一些东西有用的完成,因为许多线程将等待其他事情完成。这是一个复杂的主题,对于“我应该使用多少线程”没有真正的答案。一个好的经验法则是为每个核心都有一个线程,然后如果您想获得更高的吞吐量,请尝试使用它。在真实条件下对其进行测试是找到最佳位置的唯一真实方法。您可能会发现您只需要一个线程来处理消息,并且线程被阻塞等待消息进入的时间有一半......

显然,即使我所描述的内容也过于简单化了。 Windows 需要访问核心来做 OSy 的事情,所以即使你有 8 个核心,你的所有 8 个线程也不会总是运行,因为 Windows 线程正在轮流......然后你有 IO 线程等......

关于nservicebus - 最佳线程数 NServiceBus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12975580/

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