言語ベンチマークによると、JavaScript V8は、regex-dnaプログラムで他のプログラミング言語よりも高速です。では、なぜnode.jsアプリケーション(つまりhttpサーバー)はCアプリケーション(つまりNginx、Lighttpd)よりも高速ではないのでしょうか。
5 に答える
V8アプリケーションはjavascriptアプリケーションだからです。javascriptが最終的にマシンコードにコンパイルされたとしても、実行時の特性は異なります。
たとえば、オブジェクトで関数を呼び出し、そのオブジェクトが関数を定義していない場合、ランタイムはプロトタイプ階層をトラバースして関数を見つける必要があります。この階層は、プログラムの存続期間中いつでも変更できます。実行できる巧妙な最適化がありますが、それでもオーバーヘッドは存在します。
メモリモデルもあります。Javascriptはガベージコレクションされ、GCはCPUサイクルを取ります。
httpリクエストの処理は、regex-dnaとは別の問題であるためです。
あるタスクでAがBよりも速いという事実は、他のタスクから何を期待するかについては何も言いません。
義務的な悪い車の例え:ハムサンドイッチはポルシェよりもはるかにおいしいです。なぜ0から60まで速くならないのですか?
1つのCは、本質的に計算速度のベンチマーク言語です。最近のコンパイラは非常に優れており、非常に効率的なマシンコードを生成します。これが意味するのは、パフォーマンスの上限はCで得られるものであるということです。
node.jsに関する彼のプレゼンテーションの1つで、Ryan Dahl(作成者)は、ノードはCとほぼ同じくらい高速であると述べました(ただし、V8が適切に最適化するには時間が必要であることは言うまでもなく、GCやその他のものはパフォーマンスに影響を与えます)
そのベンチマークには15の異なるプログラムがあり、JavaScriptV8がより高速であることがわかるdna-regexベンチマークは1つだけです。他のベンチマークでは、JavaScriptのパフォーマンスははるかに低くなります。あなたは最初の選択でプログラムを選ぶことができます、これを見てください。
言語ベンチマークによると、JavaScriptV8はバイナリツリープログラムでGCCよりも高速ではありません。
言語ベンチマークによると、JavaScriptV8はkヌクレオチドプログラムでGCCより高速ではありません。
言語ベンチマークによると、JavaScriptV8はn-bodyプログラムでGCCより高速ではありません。
言語ベンチマークによると、JavaScriptV8はスペクトルノルムプログラムでGCCより高速ではありません。
言語ベンチマークによると、JavaScriptV8はfastaプログラムでGCCより高速ではありません。
言語ベンチマークによると、JavaScriptV8は逆補完プログラムでGCCより高速ではありません。
言語ベンチマークによると、JavaScriptV8はpidigitsプログラムでGCCより高速ではありません。