[英]Nodejs vs C++ performance for simple mathematic
我制作了相同的程序來測試Mac OS X上的Nodejs和C ++的性能。
首先在C ++中:
#include <iostream>
#include <time.h>
using namespace std;
int main() {
clock_t t1, t2;
cout << "Initializing\n";
t1 = clock();
double m = 0;
for (double i = 0; i != 10000000000; ++i) {
m = i * -1 + i;
}
t2 = clock();
float diff = (((float) t2 - (float) t1) / 1000000.0F) * 1000;
cout << "Finalizing with " << diff << "ms\n";
}
在Nodejs中排名第二:
console.log("Initializing");
t1 = Date.now();
var m = 0;
for (var i = 0; i != 10000000000; i++) {
m = i * -1 + i;
}
t2 = Date.now();
var diff = t2 - t1;
console.log("Finalizing with %dms", diff);
對於C ++,結果為50000ms,對於Nodejs,結果為22000ms。
為什么Node.js在這種操作上更快?
謝謝。
更新:
切換雙倍並使用long int,它給了我22000毫秒,就像Nodejs。
問題是兩種語言的代碼不相同。 在C ++中,您使用了double
並且在javascript中將變量優化為整數(盡管它們的類型為Number
,通常情況下為浮點類型)。 而且,當然,浮點運算總是比整數運算長。
嘗試用int
代替double
或在C ++版本中用long
更好。 這樣可以確保兩個版本中都有整數。
如果您這樣做,請考慮發布結果以供我們查看差異。 Ť
使用這種類型的代碼來衡量性能非常困難。 C ++編譯器和V8 JITter都對生成的本機代碼使用不同類型的優化。
需要注意的幾件事:
i != 10000000000
是危險的。 始終使用不等號( <>
)而不是等號( ==
, !=
)比較雙精度數。 long long
類型。 事實是,NodeJS實際上可以自動執行此優化,因為它是動態鍵入的。 m
。 如果使用g++ -O3
進行編譯,則編譯器實際上可以優化整個循環(嘗試一下!)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.