CPU集中タスクとして何を数えますか。たとえば、アルゴリズム/コードの観点から(ビデオ編集などのユースケースではありません)。理由は、私が本当に好きなNodeJSを使用しない主な理由は、主にCPUを集中的に使用するタスクであると思われるためです。それで何がそれを数えますか?たとえば、並べ替え、検索、グラフ横断、行列乗算などですか?
「集中的」または「高価」などの用語は相対的であり、どのアクティビティがCPU集中的であるかが常に明確であるとは限りません。一般的に言って、I/OでないものはすべてCPUです。 I/Oはnode.jsで非同期であるため、問題ありません。したがって、I/Oが高価であることを除いて、すべてが残されています。
一般的なパターンを選択するアプローチは賢明です。並べ替え、検索、さらにはアルゴリズム全般もCPUに依存します。もちろん、CPU使用率を排除することはできませんが、アプリのコードの代わりにデータベースを並べ替えることができれば、うまくいくかもしれません。
大きなループにも目が離せない。非同期イベントを発生させないループはボトルネックです。もちろん、ループを完全に回避することはできません。それらはプログラミングにとって現実の事実です。ループが短い場合は問題ありません。 10,000回実行されるループを見つけた場合は、setTimeout、process.nextTick、または別のノードプロセスを使用してループを分割することを検討してください。
10,000が任意に選択されました。ループの動作によって異なります。あなたの走行距離は異なる場合があります。
コンピューターで実行されるプロセスまたはタスクには、オペレーティングシステムによって管理されるCPUサイクル、メモリ、ディスク、ネットワークなどのさまざまなリソースが必要です。これにより、各タスクは効率的に実行されます(可能な場合はリソースを待たずに)。
OSは、多くのプロセスが同時にリソースを使用できるようにすることで、リソース使用率を最大化しようとします。プロセスが特定のリソースを大量に要求すると、その実行がボトルネック(遅延)になる可能性があります。プロセスは、そのリソースに対してリソース集約型であると言われています。したがって、リソース集約型は相対的な用語です。
並べ替え、検索、グラフ走査、行列乗算はすべてCPU操作であり、プロセスはCPU-intensive
かどうかは、実行の頻度と頻度によって異なります。例えば trans-coding video
またはcompressing files
は、メモリやディスクの読み書きに必要な量よりもはるかに多くのCPU操作を実行するため、CPUをかなり集中的に使用します。これらを実行する予定の場合は、そのための個別の子プロセスを作成して、シングルスレッドのノードプロセスが遅くならないようにするか、 node cluster を作成することをお勧めします。
Bashスクリプティングはこれに本当に入ります。私の教授は、CPUでの作業を容易にする効率的なコードを書くことについて常に私たちを悩ませています
Linuxでの非効率的なプラクティスの良い例は次のとおりです
http://hacktux.com/bash/script/efficient
私が考えることができるもう1つの例は、再帰関数、または条件が満たされるまで継続的に自分自身を呼び出す関数です。これらは通常、CPUパワーを大量に消費します。