32

CPUを集中的に使用するタスクとして何をカウントしますか。たとえば、アルゴリズム/コード(ビデオ編集などのユースケースではありません)。理由は、NodeJSを使用しない主な理由は、主にCPUを集中的に使用するタスクであると思われるためです。それで、何がそれとして数えられますか?たとえば、並べ替え、検索、グラフの横断、行列の乗算などですか?

4

3 に答える 3

32

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

一般的なパターンを選択するためのアプローチは賢明です。並べ替え、検索、さらには一般的なアルゴリズムでさえ、CPUに依存します。もちろん、CPU使用率を排除することはできませんが、アプリコードの代わりにデータベースを並べ替えることができれば、より良い結果が得られる可能性があります。

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

10,000が任意に選ばれました。それはループが何をするかに依存します。マイレージは異なる場合があります。

于 2013-03-11T15:28:54.127 に答える
10

コンピュータ上で実行されるプロセスまたはタスクには、オペレーティングシステムによって管理されるCPUサイクル、メモリ、ディスク、ネットワークなどのさまざまなリソースが必要です。これにより、各タスクが効率的に実行されます(可能な場合はリソースを待たずに)。

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

並べ替え、検索、グラフの走査、行列の乗算はすべてCPU操作であり、プロセスがCPU-intensive実行されるかどうかは、実行の量と頻度によって異なります。たとえばtrans-coding videocompressing filesまたははかなりCPUを集中的に使用します。これは、メモリまたはディスクの読み取り/書き込みに必要な量よりもはるかに多くのCPU操作を実行するためです。これらを実行することを計画している場合は、シングルスレッドであるノードプロセスの速度を低下させないように、またはノードクラスターを作成する方がよいように、別の子プロセスを作成する必要があります。

于 2013-03-11T16:44:35.710 に答える
1

Bashスクリプトは本当にこれに入ります。私の教授は、CPUでの作業を容易にする効率的なコードを書くことについて常に私たちを悩ませています

Linuxでの非効率的な方法の良い例を次に示します。

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

私が考えることができるもう1つの例は、再帰関数、または条件が満たされるまで継続的に自分自身を呼び出す関数です。これらは通常、多くのCPUパワーを消費します。

于 2013-03-11T14:55:39.440 に答える