C++ Node.js与C++;数学

C++ Node.js与C++;数学,c++,performance,node.js,math,computation,C++,Performance,Node.js,Math,Computation,我必须编写一个实现一些模糊逻辑的服务器程序,我选择在Node.js中编写它,以利用它的事件定向。 我必须解决困难的数学计算问题,我不知道获得性能的最佳方法是什么: 在Node.js中编写所有代码,并使用V8引擎的功率完成数学任务 < L>编写C++中实现所有数学函数的模块,并从节点调用它。< /LI> 在这两种平台上都有此类计算经验的人吗?既然您需要Node.js部分,那么继续,在Node.js中实现所有内容。如果它足够快,就很容易维护。很难预测虚拟机/JIT编译器的功能 如果速度不够快,首先考

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


  • 在Node.js中编写所有代码,并使用V8引擎的功率完成数学任务
  • < L>编写C++中实现所有数学函数的模块,并从节点调用它。< /LI>
    在这两种平台上都有此类计算经验的人吗?

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

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


    一般来说,如果写得正确,C++代码就更快。棘手的部分是正确地写。请查看本文以了解更多信息。要点是管理语言使编写和维护代码变得更容易,但是如果需要原始性能,C++是最好的。但是它的代价是需要大量的专业知识,而且代码更难维护。

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

    C++始终具有更快、更高效的潜力,因为您可以更紧密地控制所有重要的事情。缺点是,您必须完成所有重要的事情,而其他语言中的通用实现可能是由知道自己在做什么的人完成的,并且可能比c语言中简单或快速的实现要好++


    另外,你经常会发现瓶颈并不是你想象的那样,例如,如果读取数据的时间是计算时间的20倍(这并非不可能),那么计算速度有多快就无关紧要了。即使对于经验丰富的开发人员来说,关于瓶颈所在的直觉通常也是错误的。

    如果您的计算不是微不足道的,我想发出警告。当您进行繁重的计算时,JavaScript非常糟糕。我的故事涉及一个简单的prime程序,您可以在这里找到:


    长话短说。我创建了一个用C&JavaScript实现的简单、低效的prime-check函数。两者的实现方式相同。在C中,前200000个素数在5秒内得到验证。当在node.js中运行时,javascript中的相同函数持续了16个多小时

    denshade,您的C实现只适用于2e5而不是2e6,就像您为js所做的那样(链接到Github上今天的版本):

    管道连接到/dev/null,并将js也更改为2e5,在我当前的计算机上,C大约有6.5秒,js大约有8.5秒(使用node的一些版本)

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


    (请注意,我无法直接发表评论,因为我是SO的新成员,没有代表。)

    我运行了@denshade代码删除打印,100000个数字的计时是例外:

    • 3秒。用于nodejs

    • 6秒。对于gcc/c

    • 6秒。对于hhvm(php)

    • 14秒用于带opcache的php7

    • 15秒用于不带opcache的php7

    Nodejs速度如此之快,是因为它经过了编译和优化


    因此,也许您只需要自己测试一下,在这种情况下,哪种语言是最适合您的需要的。

    以下是Node.js证明自己是一种完美技术的领域 搭档

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

    以下是API比较:
    对于复杂的数学计算,考虑C++路径的一个问题是,你可能能够利用现有的高性能库,如LAPACK、ARMA等。其他开发人员已经投入大量时间和精力提供高度优化的功能。我怀疑您是否会找到类似级别的JavaScript高性能库。当然,如果你在矩阵计算或线性代数上有一个确定的瓶颈,那么这些C++库中的一个就行了。
    http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=node&lang2=gpp
    
    上述链接已断开,现在正在返回--

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

    那个网站搬到这里来了
    用C++编写它显然会更快(如果写得正确)。这实际上取决于可接受的性能水平。也许可以先在node.js中编写它,然后对它进行分析,看看它是否是一个瓶颈。“使用V8引擎的威力”让我发笑。如果你要做2+2,相信我,node将处于最佳状态。但是,如果你要做大矩阵操作,建议C或C++。我相信你明白我的意思。两者都能做到-2+2并不意味着节点是最好的选择。100%同意。大约一周前,我读了一篇文章,文章显示JavaScript在一些数字代码上的性能显著优于Java。很难预测JIT编译器或解释器在哪种情况下会表现良好。但始终从可能有效的简单方法开始。几乎可以肯定,JavaScript实现的运行速度比C++实现快很多。因此,从这个开始,如果你有,在C++中重新实现它。to@jalf我
    http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=node&lang2=gpp