特定のシステムで操作に使用するスレッドの最大/正しい数はどのように決定されますか? 1 から 100 のスレッドで完了できる操作があります。いくつかのテストを実行して、どれが最も効率的かを判断することはできますが、ユーザーのシステムに大きく依存するようです。
コアの数、OS などに応じて、これに対する前例はありますか?
私は C#.NET で作業していますが、違いがあるかどうかはわかりません。
特定のシステムで操作に使用するスレッドの最大/正しい数はどのように決定されますか? 1 から 100 のスレッドで完了できる操作があります。いくつかのテストを実行して、どれが最も効率的かを判断することはできますが、ユーザーのシステムに大きく依存するようです。
コアの数、OS などに応じて、これに対する前例はありますか?
私は C#.NET で作業していますが、違いがあるかどうかはわかりません。
これには単純なルールはありません。これらのスレッドが何をしているかに完全に依存します。それらがコアを燃やしている場合、理想的な数は、マシンが使用できるコアの数を超えることはありません。さらに追加すると、OS がそれらの間でコンテキストを切り替えるための余分な作業が発生するだけです。
しかし、何らかの I/O を実行すると、I/O が完了するまで長時間ブロックされます。その場合、理想は大きくなる可能性がありますが、完全に I/O サブシステムの同時実行性に依存します。
また、理想が1 つだけであることも珍しくありません。これは、スレッドの実行が、マシンに 1 つしかないリソースによって完全にバインドされている場合です。メモリバスやディスクのように。
測定する必要があります。ウィキペディアの記事でアムダールの法則を確認し、曲線が平坦になる数を選択します。プログラムが実際よりもうまく機能しているように見せるキャッシング効果に注意してください。ディスクにバインドされたプログラムを何度も実行し、実際にディスクではなくファイル システム キャッシュからデータを取得するようなものです。
完全なプログラムでは、使用する必要があるスレッドの数は、所有しているプロセッサの数です。