我必须编写一个实现一些模糊逻辑的服务器程序,我选择在Node.js中编写它以利用它的事件方向。 我必须处理困难的数学计算问题,我不知道什么是获得性能的最佳方法:
在这两个平台上都有这类计算经验的人吗?
答案 0 :(得分:41)
因为无论如何都需要Node.js部分,所以继续实现Node.js中的所有内容。如果它足够快,这很容易维护。预测虚拟机/ JIT编译器的功能非常困难。
如果速度不够快,首先要考虑算法的改进。如果这没有帮助,并且如果分析显示计算是问题,那么继续,在C ++中重新实现它。但请注意,编写高性能的C ++代码并非易事。确保你有一个好的剖析器,并经常测量。
一般来说,如果写得正确,我会说C ++代码更快。棘手的部分是正确地写它。有关详细信息,请查看此文章Google Paper on C++, Java, Scala, Go。要点是 - 托管语言使编写和编写更加容易。维护代码,但如果你需要原始性能,C ++是最好的。但它需要大量专业知识并且代码难以维护。
答案 1 :(得分:18)
denshade,你的C实现只有2e5而不是2e6,就像你为js所做的那样(链接到今天的Github上的转速):
管道到/ dev / null,并且将js也改为2e5,我在当前计算机上获得大约6.5秒的C和大约8.5秒的js(使用某个版本的节点)。
由于你的算法是O(n ^ 2),我希望2e6需要15分钟,而不是15个小时,但我还没试过。也许它因某种原因而崩溃了。
(请注意,我无法直接评论,因为我在SO上是全新的并且没有代表。)
答案 2 :(得分:7)
回答这类问题几乎是不可能的。对于这些事情,答案总是取决于你的技能以及你愿意花多少时间和精力。
C ++始终具有更快,更高效的潜力,因为您可以更加密切地控制所有重要事项。你已经做所有重要的事情和另一种语言的通用实现的缺点可能是由知道他们正在做什么的人完成的,并且可能比天真或快速实现更好在c ++中
另外,经常你会发现瓶颈并不是你认为的那样,例如,如果读数据的结果是计算时间的20倍,那么这并不重要计算速度有多快。即使是经验丰富的开发人员,关于瓶颈所在地的直觉也常常是错误的。
答案 3 :(得分:5)
http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=node&lang2=gpp
C ++使用CPU并且比Node.js执行数学运算的速度快10倍。
答案 4 :(得分:2)
使用C ++路由进行复杂的数学计算需要考虑的一件事是,您可以利用现有的高性能库,例如BLAS,LAPACK,ARMA等。其他开发人员已经在这里投入大量时间和精力来提供高度优化的功能。我怀疑你是否会为JavaScript找到类似级别的高性能库。当然,如果你有一个围绕矩阵计算或线性代数的瓶颈,那么这些C ++库就可以了。
答案 5 :(得分:1)
如果你的计算不是微不足道,我想发出警告。当您进行大量计算时,JavaScript非常糟糕。我的故事涉及一个简单的主要程序,你可以在这里找到:https://github.com/denshade/speedFun
长话短说。我创建了一个简单的,无效的主要检查功能,在C& JavaScript的。两者都以相同的方式实现。第一个2000 000个素数在C中用5秒验证。在node.js中运行时,javascript中的相同函数持续超过16个小时。
答案 6 :(得分:1)
我已经运行@denshade代码删除打印件,并且100000数字的时间是例外:
3秒。!
6秒。为gcc / clang编译c
6秒。对于hhvm(php)
14秒 for php7 w / opcache
15秒 for php7 w / o opcache
Nodejs如此之快,因为它是经过时间编译和优化的。
所以,也许你只需要自己测试一下这种情况下最适合你需要的语言。
答案 7 :(得分:0)
以下是Node.js证明自己是一种完美技术的领域 伙伴。
● I/O bound Applications
● Data Streaming Applications
● Data Intensive Real-time Applications (DIRT)
● JSON APIs based Applications
● Single Page Applications
不建议将Node.js用于CPU密集型应用程序。
这是API比较: https://www.linkedin.com/pulse/nodejs-vs-java-which-faster-apis-owen-rubel