node.js, php, perl, go, c 速度比較 メモ
node.js(v8) , php ,perl, go , c でどのくらい計算速度が違うのかちょっと気になったのでメモ。
for文で1~100000000を足していく処理を行ってみる。
$ time node -e 'var sum=0; for(var i=0; i<100000000; i++){ sum+=i;} console.log(sum);' 4999999950000000 real 0m0.904s user 0m0.900s sys 0m0.023s
$ time php -r '$sum=0; for($i=0; $i<100000000; $i++){ $sum+=$i;} echo $sum."\n";' 4999999950000000 real 0m6.361s user 0m6.352s sys 0m0.007s
$ time perl -e 'my $sum=0; for(my $i=0; $i<100000000; $i++){$sum+=$i;} print "$sum\n"' 4999999950000000 real 0m11.372s user 0m11.363s sys 0m0.005s
$ cat test.go package main import("fmt") func main() { sum := 0 for i:=0; i<100000000; i++ { sum += i } fmt.Println(sum); } $ time ./test 4999999950000000 real 0m0.085s user 0m0.082s sys 0m0.005s
$ cat test.c #include <stdio.h> int main() { long long int i, sum=0; for(i=0; i<100000000; i++){ sum+=i; } printf("%ld \n", sum); return 0; } $ time ./test_c_O0.out 4999999950000000 real 0m0.338s user 0m0.336s sys 0m0.001s $ time ./test_c_O1.out 4999999950000000 real 0m0.002s user 0m0.000s sys 0m0.002s $ time ./test_c_O2.out 4999999950000000 real 0m0.002s user 0m0.000s sys 0m0.002s $ time ./test_c_O3.out 4999999950000000 real 0m0.002s user 0m0.000s sys 0m0.002s
結果
node.js(v0.10.5) : 0.904s
php(v5.3.3) : 6.361s
perl(v5.10.1) : 11.372s
go(v1.2.2) : 0.085s
c(O0)(gcc 4.4.7) :0.338s
c(O1)(gcc 4.4.7) :0.002s
c(O2)(gcc 4.4.7) :0.002s
c(O3)(gcc 4.4.7) :0.002s
node.jsが結構早い。
以外だったのがphpよりperlが遅いこと。しかもだいぶ遅いです。
goはコンパイルが必要な言語だけあってやはりそれなりに早い。Cの最適化なし(O0)より早い結果に。
Cで最適化すると圧倒的な早さ。 最適化オプションをつけると内部的な処理はぜんぜん違うものになってたりすることがあるので、この結果を信用していいかは微妙ですが。
そのうちもう少し複雑な処理で比較してみたいです。