1

我有以下两种服务器配置:

服务器1:

处理器 Intel(R) Xeon(R) CPU E5-4617 0 @ 2.90GHz, 2900 Mhz, 6 Core(s), 6 Logical Processor(s) 处理器 Intel(R) Xeon(R) CPU E5-4617 0 @ 2.90GHz , 2900 Mhz, 6 Core(s), 6 Logical Processor(s) Processor Intel(R) Xeon(R) CPU E5-4617 0 @ 2.90GHz, 2900 Mhz, 6 Core(s), 6 Logical Processor(s) 处理器Intel(R) Xeon(R) CPU E5-4617 0 @ 2.90GHz, 2900 Mhz, 6 Core(s), 6 Logical Processor(s)

操作系统名称 Microsoft Windows Server 2012 Standard

物理内存 128 GB

服务器2:

处理器 Intel(R) Xeon(R) CPU X5650 @ 2.67GHz, 2659 Mhz, 4 Core(s), 4 Logical Processor(s)

操作系统名称 Microsoft Windows Server 2008 R2 Enterprise

物理内存 24 GB

我的应用程序使用任务 API 来并行化父组件和子组件,父类任务/线程将在其中调用子类对象,子类对象再次使用任务 API 并行化模块。

最初我在 server2 上运行,并且得到了性能结果,这比在没有任务的情况下运行应用程序要好,现在我的期望是理论上当 Server1 出现时,应该有一些性能提升,因为子组件至少有 20 -30 个任务并行运行,但令我惊讶的是,它已经恶化了 3-4 倍,所以如果之前子组件的单次执行需要 2 秒,现在需要 7-8 秒,即对我们来说是一场灾难,因为子组件可能会被调用几百万次,我不确定如何解决这个问题,特别是因为 Server1 被认为是生产。任何让我开始解决问题的指示都会很棒。

如果您需要更多详细信息/说明,请告诉我。

谢谢,

米纳尔

4

1 回答 1

0

您的问题有点含糊,尤其是因为我们没有可使用的代码或对该框架的任何想法。但我可以想到一些可能导致您的问题的一般性问题。首先,仅仅因为您添加更多内核并不意味着您将获得更好的处理,实际上取决于代码的编写方式,您可能会得到与您所看到的完全相反的结果。我的主要怀疑是你有一些你所有的任务都在使用的公共对象,你的任务最终会争夺导致瓶颈。所以我的第一个问题是您在任务之间是否有任何共享资源?基本上是您正在产生单个工作单元的任务(即任务之间没有共享依赖项)?另一个表明您遇到瓶颈的警告信号是您的 CPU 使用率。从理论上讲,如果您有许多独立的工作单元,那么您应该消耗大量的 CPU,因为 .Net 将能够并行运行它们。如果您有很多任务,但 CPU 使用率较低,那么很可能某些共享对象正在扼杀您的并行化。

于 2013-08-29T06:01:39.470 回答