与常规服务器相比,.Net多线程应用程序在功能强大的服务器上运行速度较慢

本文关键字:服务器 运行 功能强大 速度 应用程序 常规 多线程 Net | 更新日期: 2023-09-27 18:29:37

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

服务器1:

处理器Intel(R)Xeon(R)CPU E5-4617 0@2.90GHz,2900 Mhz,6核,6逻辑处理器处理器Intel(R)Xeon(R)CPU E5-4617 0@2.90GHz,2900 Mhz,6核,6逻辑处理器处理器Intel(R)Xeon(R)CPU E5-4617 0@2.90GHz,2900 Mhz,6核,6逻辑处理器处理器Intel(R)Xeon(R)CPU E5-4617 0@2.90GHz,2900 Mhz,6核,6逻辑处理器

操作系统名称Microsoft Windows Server 2012标准

物理内存128 GB

服务器2:

处理器Intel(R)Xeon(R)CPU X5650@2.67GHz,2659 Mhz,4核,4逻辑处理器

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

24 GB 物理内存

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

最初,我在服务器2上运行,并得到了性能结果,这比在没有任务的情况下运行应用程序要好,现在我的预期是,当服务器1出现时,应该会有一些性能增强,因为子组件至少有20-30个任务并行运行,但令我完全惊讶的是,它恶化了3-4倍,因此,如果子组件的早期单次执行需要2秒,那么现在需要7-8秒,这对我们来说是一场灾难,因为子组件可能会被调用数百万次,我不确定如何解决这个问题,尤其是假设Server1是产品。任何能让我开始解决这个问题的建议都会很棒。

如果你需要更多的细节/澄清,请告诉我。

谢谢,

Mrinal

与常规服务器相比,.Net多线程应用程序在功能强大的服务器上运行速度较慢

您的问题有点模糊,尤其是因为我们没有代码可供使用,也没有任何框架概念。但我能想到一些可能导致你问题的一般因素。首先,仅仅因为你添加了更多的核心并不意味着你会得到更好的处理,事实上,根据代码的编写方式,你可能会得到与你所看到的完全相反的结果。我的主要怀疑是,你的所有任务都在使用一些共同的对象,而这些对象最终会导致瓶颈。所以我的第一个问题是,你在任务之间有共享资源吗?基本上,你正在生成的任务是单独的工作单元吗(即,任务之间没有共享的依赖关系)?另一个出现瓶颈的警告信号是您的CPU使用率。从理论上讲,如果你有许多独立的工作单元,那么你应该消耗大量的CPU,因为.Net可以并行运行它们。如果您有很多任务,但CPU使用率较低,那么很可能某个共享对象正在扼杀您的并行化。