Node.js与C ++的math

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

  1. 全部写入Node.js,并使用V8引擎的强大function完成math任务。
  2. 用C ++编写一个模块来实现所有的math函数,并从Node中调用它。

任何人都有这两种平台上的计算types的经验?

因为无论如何你都需要Node.js部分,所以在Node.js中实现一切。 如果速度足够快,这很容易维护。 预测虚拟机/ JIT编译器的function是非常困难的。

如果速度不够快,首先要考虑algorithm的改进。 如果这没有帮助,并且如果分析显示计算是问题,请继续,用C ++重新实现它。 但请注意,编写高性能的C ++代码并不是微不足道的。 确保你有一个好的分析器,并经常测量。

一般来说,如果正确写入,C ++代码会更快。 棘手的部分是正确写入。 请查阅这篇文章Google Paper on C ++,Java,Scala,Go获取更多信息。 要点是 – 托pipe语言使得编写和维护代码变得容易很多,但是如果你需要原始的性能,C ++是最好的。 但是它的代价是需要很多专业知识,代码难以维护。

denshade,你的C实现只能到2e5而不是2e6,就像你为js所做的一样(连接到今天的Github上的转换):

  • primes.c
  • primes.js

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

由于你的algorithm是O(n ^ 2),我预计2e6需要15分钟,而不是15个小时,但我还没有尝试过。 也许它确实因为某些原因而崩溃。

(请注意,我不能直接评论,因为我是全新的,没有代表。)

回答这样的问题几乎是不可能的。 一如既往的答案取决于你的技能以及你愿意投入多less时间和精力。

C ++总是有可能更快,更高效,因为你对所有重要的事情有更多的控制权。 你必须做所有重要的事情和其他语言的generics实现可能是由谁知道自己在做什么,并可能比在天真的或快速的实现在c + +

另外,通常你会发现瓶颈不是你想象的那样,例如,如果你的数据读取需要花费20倍,只要计算不是不可能的话,计算是。 即使对有经验的开发人员来说,关于瓶颈所在的位置的直觉往往是严重错误的。

为了进行复杂的math计算,需要考虑的一件事是你可以利用现有的高性能库,比如BLAS ,LAPACK,ARMA等。其他开发者已经花费了大量的时间和精力来提供高度优化的function。 我怀疑你会发现JavaScript的高性能库类似的水平。 当然,如果你在matrix计算或线性代数方面有一个确定的瓶颈,那么这些C ++库中的一个就是要走的路。

如果你的计算不是微不足道的,我想发出警告。 当你要进行繁重的计算时,JavaScript非常糟糕。 我的故事涉及一个简单的主要程序,你可以在这里find: https : //github.com/denshade/speedFun

长话短说。 我创build了一个简单的,无效的在C&JavaScript中实现的素数检查函数。 两者都以相同的方式实施。 在C中,前2000 000个素数在5秒内被validation。在node.js中运行时,javascript中的相同函数持续了16个小时以上。

我跑了@denshade代码删除打印和100000数字的时间是例外:

  • 3秒 为nodejs!

  • 6秒 为gcc / clang编译c

  • 6秒 为hhvm(php)

  • php7 w / opcache 14秒

  • php7 w / o opcache 15秒

Nodejs是如此之快,因为它被编译和优化的时间。

所以,也许你只需要testing一下你自己,这是适合你需求的最好的语言。

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

C ++使用CPU,比Node.js执行math运算的速度快10倍。

以下是Node.jscertificate自己是完美技术合作伙伴的领域。

● I/O bound Applications ● Data Streaming Applications ● Data Intensive Real-time Applications (DIRT) ● JSON APIs based Applications ● Single Page Applications 

对于CPU密集型应用程序,不build议使用Node.js。

这里是API比较: https : //www.linkedin.com/pulse/nodejs-vs-java-which-faster-apis-owen-rubel