每个 CPU 的最大线程数

每个 CPU 的最大线程数

我目前正在使用 Visual Studio Test Suite 负载测试器来模拟另一台服务器上我们的 Web 应用程序的负载。(不,我不是针对生产进行测试)。我相信它正在为每个模拟用户创建一个线程。

当我这样做的时候,我遇到了可能无关的蓝屏。

但这又引出了一个问题。

在我的 CPU 无法处理那么多的请求之前,我可以使用多少个线程?

眼镜:

Intel Core 2 Duo CPU T7700 @ 2.40 GHz 2.40 GHz(32 位)

我还需要提供其他信息或背景信息吗?

答案1

这取决于您正在运行的 .NET 版本。您可以在 .NET 3.5 上为处理器分配 250 个工作线程。

查看MSDN 文章。

答案2

您可以在运行此测试时监视这些性能计数器。当您增加并发性时,它将让您了解您的实际限制是什么:

  • 系统\“处理器队列长度”。

处理器队列长度是处理器队列中的线程数。与磁盘计数器不同,此计数器仅显示就绪线程,而不显示正在运行的线程。即使在具有多个处理器的计算机上,处理器时间也只有一个队列。因此,如果计算机有多个处理器,则需要将此值除以服务于工作负载的处理器数量。通常,每个处理器的持续处理器队列少于 10 个线程是可以接受的,具体取决于工作负载。

这与 Unix 平均负载类似,因为它表示等待执行的线程。这与 CPU 利用率 (%) 不同,后者仅告诉您工作时间与空闲时间。

  • 系统\“上下文切换/秒”。

上下文切换/秒是计算机上所有处理器从一个线程切换到另一个线程的综合速率。上下文切换发生在正在运行的线程自愿放弃处理器、被更高优先级的就绪线程抢占或在用户模式和特权(内核)模式之间切换以使用执行或子系统服务时。它是计算机中所有处理器上运行的所有线程的线程上下文切换/秒的总和,以切换次数来衡量。系统和线程对象上有上下文切换计数器。此计数器显示最近两个样本中观察到的值之间的差值除以样本间隔的持续时间。

此数字与每个系统相关。但是,通过一些基准测试,您可以使用此计数器来关联处理能力的上限。

答案3

需要考虑的一些限制因素:

  1. 在线程之间切换上下文所花费的时间可能超过拥有多个线程的好处。通常,除非您的线程花费大量时间等待,否则每个核心更多线程的好处是性能下降,而不是提高 - 请参阅下一点:
  2. 拥有多个线程有什么意义吗?除非每个线程都花费大量时间等待某事发生 - 如果你有一个核心 - 那么你一次只能做一件事。投入更多线程不会有帮助。对于 2 个核心 2 个线程...
  3. 堆栈内存耗尽是有可能的 - 因为操作系统无法再跟踪所有线程。

相关内容