24

いくつかのファジー ロジックを実装するサーバー プログラムを作成する必要があり、そのイベント指向を利用するために Node.js で作成することにしました。難しい数学計算問題に取り組まなければなりませんが、パフォーマンスを得る最善の方法がわかりません:

  1. すべて Node.js で記述し、V8 エンジンのパワーを数学的なタスクに使用します。
  2. すべての数学関数を実装するモジュールを C++ で作成し、それを Node.js から呼び出します。

両方のプラットフォームでこれらのタイプの計算の経験がある人はいますか?

4

8 に答える 8

50

いずれにしても Node.js の部分が必要なので、Node.js ですべてを実装してください。十分に高速であれば、これを維持するのは簡単です。仮想マシン/JIT コンパイラの能力を予測することは非常に困難です。

十分に高速でない場合は、まずアルゴリズムの改善について考えてください。これで問題が解決せず、プロファイリングで計算に問題があることが判明した場合は、C++ で再実装してください。ただし、パフォーマンスの高い C++ コードを記述することは簡単ではないことに注意してください。手元に優れたプロファイラーがあり、頻繁に測定していることを確認してください。

一般的に、C++ コードは正しく記述されていれば高速であると言えます。トリッキーな部分は、正しく書くことです。詳細については、この記事Google Paper on C++、Java、Scala、Goを参照してください。要点は、マネージド言語はコードの記述と保守をはるかに簡単にしますが、生のパフォーマンスが必要な場合は C++ が最適です。しかし、それには多くの専門知識が必要であり、コードの保守が難しくなるという代償が伴います。

于 2012-08-30T11:45:42.147 に答える
25

denshade、C 実装は、js で行ったように 2e6 ではなく 2e5 のみになります (Github の今日のリビジョンへのリンク):

/dev/null にパイプし、js も 2e5 に変更すると、現在のコンピューターで C の場合は約 6.5 秒、js の場合は約 8.5 秒 (いくつかのバージョンのノードを使用) になります。

あなたのアルゴリズムは O(n^2) であるため、2e6 には 15 時間ではなく 15 分ほどかかると予想されますが、試したことはありません。なんらかの理由でそれがひどくバラバラになるかもしれません。

(私は SO を初めて使用し、担当者がいないため、直接コメントできないことに注意してください。)

于 2013-09-04T19:01:46.083 に答える
9

この種の質問に答えることはほとんど不可能です。これらのことに対する答えはいつものことですが、それはあなたのスキルと、どれだけの時間と労力を費やす意思があるかによるということです。

C++ は、重要なすべてのことをより厳密に制御できるため、常に高速かつ効率的になる可能性を秘めています。重要なすべてのことをしなければならないという欠点と、他の言語での一般的な実装は、おそらく彼らが何をしているのかを知っている人によって行われ、C ++での単純または迅速な実装よりも優れている可能性があります

さらに、ボトルネックがあなたが考えているものではないことがよくあります。たとえば、データの読み込みに計算の 20 倍の時間がかかることが判明した場合、不可能ではありません。計算は。また、ボトルネックがどこにあるのかについての直感は、経験豊富な開発者であってもしばしばひどく間違っています。

于 2012-08-30T11:55:16.063 に答える
7
http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=node&lang2=gpp

上記のリンクは死んでいて、今は戻ってきています--

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

C++ は CPU を使用し、Node.js が数学演算を行うよりも最大 10 倍高速に実行します。

そのサイトはこちらに移動しました https://benchmarksgame-team.pages.debian.net/benchmarksgame/which-programs-are-fastest.html

于 2017-01-01T17:32:28.517 に答える
4

プリントを削除する @denshade コードを実行しましたが、100000 の数字のタイミングは例外的です。

  • 3秒 nodejs用!

  • 6秒 gcc/clang でコンパイルされた c の場合

  • 6秒。hhvm (php) の場合

  • opcache 付きの php7 で14 秒

  • opcache なしの php7 の場合は15 秒

Nodejs は、時間をかけてコンパイルおよび最適化されるため、非常に高速です。

したがって、この場合、ニーズに合った最適な言語を自分でテストする必要があるかもしれません。

于 2016-03-03T16:17:08.583 に答える
3

複雑な数学的計算に C++ ルートを使用する際に考慮すべきことの 1 つは、 BLAS、LAPACK、ARMAなどの既存の高性能ライブラリを活用できる可能性があるということです。高度に最適化された機能。同様のレベルの JavaScript 用の高性能ライブラリーが見つかるとは思えません。確かに、行列計算や線形代数に関するボトルネックが特定されている場合は、これらの C++ ライブラリのいずれかを使用することをお勧めします。

于 2016-03-04T14:52:16.040 に答える
0

以下は、Node.js が完璧なテクノロジー パートナーであることを証明している分野です。

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

CPU を集中的に使用するアプリケーションに Node.js を使用することはお勧めできません。

ここに API の比較があります: https://www.linkedin.com/pulse/nodejs-vs-java-which-faster-apis-owen-rubel

于 2016-03-04T14:22:16.463 に答える