2013-03-11 7 views
9

CPU集約タスクとは何と考えますか?という点では...アルゴリズム/コード(例えば、ビデオ編集のようなユースケースではない)です。理由は、NodeJSを使用しない主な理由は、私が本当に好きなものは、主にCPU集約的な仕事だということです。それで何が重要なのでしょうか?それは並べ替え、検索、グラフ横断、行列の乗算などですか?CPU集約タスク(ソート、検索など)はどれですか?

+0

CPUを集中的に使用していると思われることを綴っている場合は、役立つかもしれません。 –

答えて

11

「集中型」や「高価な」という用語は相対的なものであり、CPU集約型のアクティビティは必ずしも明らかではありません。一般に、I/O以外のものはCPUです。また、I/Oはnode.jsでは非同期であるため、問題はありません。したがって、I/Oが高価であることを除いてすべてが残っています。

一般的なパターンを選択するあなたのアプローチは賢明です。並べ替え、検索、およびアルゴリズムさえ一般的には、CPUにバインドされています。もちろん、あなたはCPU使用量を排除することはできませんが、アプリケーションコードの代わりにデータベースをソートすることができれば、より良いかもしれません。

大規模なループにも注意してください。非同期イベントを発生させないループはボトルネックです。もちろん、ループを完全に回避することはできません。それらはプログラミングのための人生の事実です。あなたのループが短い場合、問題はありません。 10,000回実行するループが見つかった場合は、setTimeout、process.nextTick、または別のノードプロセスを使用してループを分割することを検討してください。

00を任意に選んだ。ループの内容によって異なります。あなたの人数は変わるかもしれません。

+0

操作が高価であるとします。あなたはそれを修正するために何をしますか? NodeJS用のC++拡張を作成し、それをUR JSに呼び出させますか?または単に高価な作業をワーカースレッドに入れますか?または、他の何か?たぶん、別の言語でアプリを作成していますか? –

+1

個人的には、私の最初の努力は、他のすべてのオプションが複雑さを増すため、操作を高速化することです。それが不可能な場合は、私たちが数秒で何かを見て、それを2〜4チャンクに分割するのであれば、setTimeoutを検討します。それで十分でない場合、私はワーカープロセスを試してみるでしょう。最後の手段として、私はC++拡張を検討するかもしれません。 – Brandon

+0

webworker-threadsや同様のパッケージをチェックアウトすることができます https://npmjs.org/package/webworker-threads – Brandon

1

Bashスクリプトは実際にこれに入ります。私の教授はいつも、ここでLinuxの

http://hacktux.com/bash/script/efficient

私は再帰関数であると考えることができます別の例では非効率的な慣行の良い例がある

CPU

の作業を容易にする効率的なコードを書くことについて私たちにくどくどされます条件が満たされるまで継続的に自分自身を呼び出す関数です。これらは通常、多くのCPUパワーを消費します。

+1

これらの提案の多くは、組み込みエコー、関数、配列の使用など、パフォーマンスではなく、保守性/可搬性/可読性のためのものです。 – Brandon

6

コンピュータ上で実行されるプロセスやタスクには、オペレーティングシステムで管理されるCPUサイクル、メモリ、ディスク、ネットワークなどのさまざまなリソースが必要です(できるだけリソースを待つことなく)。

OSは、複数のプロセスに同時にリソースを使用させることによってリソース使用率を最大化しようとします。プロセスが特定の リソースを大量に要求すると、実行のボトルネック(遅延)を招く可能性があります。 プロセスは、そのリソースを使用してリソースを大量に消費すると言われています。したがって、リソース集約的な は相対的な用語です。

並べ替え、検索、グラフの横断、行列の乗算はすべてCPU操作であり、プロセスはどれくらいの頻度で実行されているかによって異なります。たとえば、trans-coding videoまたはcompressing filesはCPUの処理能力がかなり高いです。なぜなら、CPUの動作がメモリやディスクの読み書きに必要以上に大きくなるからです。これらの作業を行う予定がある場合は、別の子プロセスを作成して、単一スレッドのノードプロセスを遅くしないようにするか、node clusterを作成するようにしてください。

+0

私はワーカースレッドを使うことができましたが、非常に長く待たなければならない完了するために?だから、懸垂UI(ワーカースレッドで修正するのは難しくない)以外は、Python/Rubyが同じ計算を行うよりも遅いのでしょうか? –

+0

これは両方で実装がどのように行われるかによって異なります。 JavaScriptとPythonはどちらもスクリプト言語です。一般的には、JavaScriptはPythonより高速です(数値集約的なケースではPythonが優れています)。ここを参照してくださいhttp://www.quora.com/Programming-Languages/Is-JavaScript-v8-faster-than-Python。 – user568109

関連する問題