Node.js vs C++ for mathematic

Pab*_*ect 21 c++ math performance computation node.js

我必须编写一个实现一些模糊逻辑的服务器程序,我选择在Node.js中编写它以利用它的事件方向.我必须处理困难的数学计算问题,我不知道什么是获得性能的最佳方法:

  1. 在Node.js中全部写入,并使用V8引擎的强大功能进行数学任务.
  2. 用C++编写一个实现所有数学函数的模块,并从Node调用它.

在这两个平台上都有这类计算经验的人吗?

Tob*_*ner 41

既然你需要Node.js部分,请继续,在Node.js中实现所有内容.如果它足够快,这很容易维护.很难预测虚拟机/ JIT编译器的强大功能.

如果速度不够快,首先要考虑算法的改进.如果这没有帮助,并且如果分析显示计算是问题,那么继续,在C++中重新实现它.但请注意,编写高性能的C++代码并非易事.确保你有一个好的剖析器,并经常测量.

一般来说,如果写得正确,我会说C++代码更快.棘手的部分是正确地写它.有关更多信息,请查看本文关于C++,Java,Scala,Go的Google论文.要点是 - 托管语言使编写和维护代码变得更加容易,但如果您需要原始性能,C++是最好的.但它需要大量专业知识并且代码难以维护.

  • 同意100%.我在大约一周前阅读了一篇文章,显示JavaScript在一些数字代码上显着优于Java.很难预测JIT编译器或解释器在哪些情况下表现良好.但总是从可行的简单方法开始.几乎可以肯定,Javascript实现的启动和运行速度远远超过C++实现.所以从这开始,如果必须的话,用C++重新实现它 (2认同)

Tom*_*mer 19

denshade,你的C实现只有2e5而不是2e6,就像你为js做的那样(链接到今天的Github转速):

管道到/ dev/null,并且将js也改为2e5,我在当前计算机上获得大约6.5秒的C和大约8.5秒的js(使用某个版本的节点).

由于你的算法是O(n ^ 2),我希望2e6需要15分钟,而不是15个小时,但我还没有尝试过.也许它因某种原因而崩溃了.

(请注意,我无法直接评论,因为我在SO上是全新的并且没有代表.)


jco*_*der 7

回答这类问题几乎是不可能的.对于这些事情,答案总是取决于您的技能以及您愿意投入多少时间和精力.

C++始终具有更快,更高效的潜力,因为您可以更加密切地控制所有重要事项.你必须做所有重要的事情和其他语言的通用实现的缺点可能是由一个知道他们正在做什么的人完成的,并且可能比c ++中的天真或快速实现更好.

另外,你经常会发现瓶颈并不是你认为的那样,例如,如果读数据的结果是计算时间的20倍,这是不可能的,那么几乎不会有多快计算是.即使是经验丰富的开发人员,关于瓶颈所在的直觉也常常是错误的.


Hea*_*cke 5

http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=node&lang2=gpp
Run Code Online (Sandbox Code Playgroud)

上面的链接已消失,现在在回溯中-

https://web.archive.org/web/20180324192118/http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=node&lang2=gpp

C ++使用CPU并比执行数学运算的Node.js快10倍。

该站点移至此处 https://benchmarksgame-team.pages.debian.net/benchmarksgame/which-programs-are-fastest.html