小编典典

什么是更快的Java或C#(或较旧的C)?

java

我目前正在决定要在其上构建科学计算产品的平台,并且正在决定在Core2 Quad
CPU上使用C#,Java或带有Intel编译器的纯C语言。它主要是整数运算。

到目前为止,我的基准测试表明Java和C彼此差不多,并且.NET /
C#落后大约5%,但是我的许多同事都声称经过适当的优化的.NET将在足够的时间上击败这两个方面。供JIT开展工作。

我一直以为JIT会在应用启动后的几分钟内完成它的工作(在我看来,可能是几秒钟,因为它主要是紧密的循环),所以我不确定是否要相信它们

谁能说明情况?.NET会击败Java吗?(或者我现在最好还是坚持使用C?)。

该代码是高度多线程的,数据集的大小为数TB。

在这种情况下,Haskell / Erlang等不是选项,因为将有大量现有的旧C代码将移植到新系统,并且将C移植到Java /
C#比Haskell或Erlang简单得多。(除非这些当然提供了显着的加速)。

编辑:我们正在考虑迁移到C#或Java,因为从理论上讲它们可能更快。我们可以节省处理时间的每一%,每年可以为我们节省数万美元。在这一点上,我们只是试图评估C,Java或c#是否会更快。


阅读 192

收藏
2020-12-03

共1个答案

小编典典

问题中的关键信息是:

我们可以节省处理时间的每一%,每年可以为我们节省数万美元

因此,您需要考虑 每一%的 费用削减多少钱 。如果优化工作每年花费数万美元,那是不值得的。您可以通过解雇程序员来节省更多。

有了合适的技能(今天很少见,因此价格更高),您就可以手工制作汇编程序,以获取最快的代码。使用很少(稀有且昂贵)的技能,您可以用看起来非常丑陋的C代码完成几乎一样的工作。等等。您从中挤出的性能越多,开发工作就会付出的代价就越多,付出更大的努力就会得到越来越少的回报。如果从中获得的利润保持在“每年几万美元”,那么就会有一点不再值得付出努力了。实际上,我很可能会猜到您已经到了这一点,因为“每年几万美元”在一个薪水的范围内,可能不足以购买手动优化复杂程序所需的技能。

我想如果您已经用C语言编写了代码,那么将它们全部重写为另一种语言的直接翻译的工作将浪费90%的工作。仅仅因为您将不会利用平台的功能,而是相反地对它们进行工作(例如,尝试像使用C一样使用Java),它的运行速度很可能会变慢。

同样,在您现有的代码中,将有部分对运行时间做出至关重要的贡献(它们经常运行),而其他部分则完全无关(它们很少运行)。因此,如果您有加速程序的想法,那么浪费时间将其应用于不影响运行时间的程序部分就没有任何经济意义。

因此,使用探查器查找热点,并查看现有代码在哪里浪费了时间。

当我发现对代码的引用为“多线程”时进行更新

在这种情况下,如果您集中精力消除瓶颈,以便程序可以在大量内核上很好地扩展,那么它将自动以每年的速度增长,其速度将使您无法进行的其他优化相形见war。明年的这个时候,四核将成为台式机的标准配置。第二年,8核将变得更便宜(我一年前以几千美元的价格购买了一个),并且我预计到那时,一台32核机器的成本将低于开发人员。

2020-12-03