每个CPU的最大线程数

我目前正在使用Visual Studio Test Suite负载testing器来模拟不同服务器上的Web应用程序的负载。 (不,我不testing生产)。 我相信它是每个模拟用户创build一个线程。

当我这样做的时候,我经历了一个可能与之无关的蓝屏。

但是这提出了这个问题。

在CPU无法处理GENERATING许多请求之前,可以使用多less个线程?

眼镜:

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

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

这取决于你正在运行的.NET版本。 您可以在.NET 3.5上使用250工作线程处理器。

看看这个 MSDN文章。

您可以在运行此testing时监视这些性能计数器。 当你增加并发性时,它会给你一个你的实际限制的概念:

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

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

这与Unix平均负载相似,因为它表示等待执行的线程。 这与CPU利用率%不一样,它只会告诉你工作与闲置有多less时间。

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

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

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

一些限制因素要考虑:

  1. 在线程之间花费上下文切换的时间可以超过拥有多个线程的好处。 一般来说,除非你的线程花了很多时间等待,否则每个内核线程数更多的好处是降低性能,而不是提高性能 – 参见下一点:
  2. 有多个线程有任何意义吗? 除非每个线程花费大量的时间等待发生 – 如果你有一个核心 – 那么你只能一次做一件事。 抛出更多的线程是不会有帮助的。 对于2核心2线程…
  3. 因为OS不能跟踪所有的线程,所以用尽堆栈内存是可能的。