回答:
ボトルネックがCPU自体である場合、優先順位は役に立ちません。ほとんどのシステムにはすべてのプロセスを継続的に実行するのに十分なプロセッサがないため、実際に優先順位は、オペレーティングシステムが次に実行するプロセスを決定するために使用するスケジューリングアルゴリズムに影響します。
優先度の高いタスクはキューの先頭にすばやく移動するため、これは一般的なレイテンシーに役立ちますが、プロセスが実際の計算で割り当てられたタイムスライス全体を使い果たしている場合、スケジューリングはそこで何も変更しません。優先順位の変更は、I / Oを待機しているプロセスがあり、応答性を高めたい場合に便利です。
優先順位は、使用可能なCPUコアよりも実行可能なスレッドが多い場合にのみ重要です。その場合、優先度は実行するスレッドを制御します。ほとんどのシステムでは、CPUの競合に対して十分な計算が行われていません。スレッドがすべてブロックされ、何かが起こるのを待っています。それは、何かを入力する、マウスを動かす、画面をタッチする、ディスク、ネットワーク、プラグインした他のデバイスからデータが届く、または別のスレッドが重要なデータの処理を完了するのを待っているかもしれません構造。明示的にファイルを読み取るのではなく、ディスクの一部またはスワップアウトされたメモリからプログラムの一部が読み取られるのを待っている可能性があります。
Windowsでは、スケジューラーは各優先度レベルで実行可能なスレッドのキューを保持します。スケジューリングの決定を行うとき-スレッドがそのクォンタム(他の何かを実行する必要がある前に許可された時間)を使い果たした、つまり別のスレッドがターンを取得するか、スレッドがブロックされて実行できなくなったこと、またはより高い優先順位スレッドのブロックが解除されました-実行可能なスレッドがある最優先レベルのキュー内の次のスレッドがスケジュールされます。実行中のスレッドがクォンタムを使い果たした場合、キューの最後に置かれます。実行可能な優先度レベルのスレッドがそれだけであり、他の高優先度の実行可能なスレッドが実行されていないが、実行されていないスレッドがある場合、別のターンを取得します。
マルチコア/マルチプロセッサシステムでは、スレッドを実行できるコアに制限がある場合があります。また、システムはスレッドを理想的なコアとNUMAノード内に保持しようとするため、スレッドのデータはコアのキャッシュに残り、作成されたデータに高速でアクセスできます。次に実行するものが選択できない場合、スレッドは理想的でないコアでも実行されます。
システムはさまざまな動的優先度ブーストと動的クォンタムサイズを使用して、フォアグラウンドアプリケーションがバックグラウンドプロセスよりも多くの時間(必要な場合)を取得し、I / O操作の完了時にプロセスが迅速に反応できるようにします(マウス、キーボード、タッチスクリーン入力)。さらに、優先度の高いスレッドが、優先度の低いスレッドが現在保持しているリソースを待機している優先度の反転を回避するために、優先度の向上が使用されます。優先度が中程度のスレッドも実行されている場合、優先度の低いスレッドはプロセッサ時間の不足に陥り、優先度の高いスレッドは保持されます。したがって、低優先度のスレッドは一時的に高優先度にブーストされるため、時間がかかり、高優先度のスレッドが必要とするリソースを解放することが望まれます。
Windows Vistaより前のバージョンでは、スレッドの優先順位はI / O操作の完了速度に影響しませんでした。Windows Vista以降、I / Oにも優先度を設定できます。デフォルトでは、スレッドの優先度に基づいています。
要約:CPUに大きな負荷がかかっていない限り、スレッドの優先順位を変更した場合の影響はほとんど見られません。その場合でも、その影響は通常最小限です。プロセスがI / Oを待たなければならない場合、または他のプロセスとCPU時間で競合していない場合、既に可能な限り高速で実行されており、優先順位を変更しても速くなりません。
一般に、プログラムが複数のCPUを使用するようにするには、余分な労力が必要です(マルチスレッドを追加することにより)。そのため、プログラムの優先順位が最高であっても、1つのコアしか使用していない可能性があります。
その他の考えられる問題:
I / OにバインドされたプロセスのI / O優先度を上げても、必ずしもより速く実行されるとは限りません。たとえば、別の(場合によってはリモートの)プロセスによって生成されたデータのコンシューマーであり、そのソースがデータを生成する速度に追いついている場合は、高速化やスループットの向上ができません。
Mike Dimmickの回答で説明されているように、現在受け入れられている回答(/superuser//a/752587/322588)の最初の文に明確に記載されているものとは反対に、CPUがボトルネックの場合に優先度の変更が最も効果的です(/superuser//a/752864/322588)。さらに、受け入れられた回答の2番目の段落のステートメントは、「プロセスが実際の計算で割り当てられたタイムスライス全体を使い果たしている場合、スケジューリングはそこに何も変更しません」というプロセスは、一般にすべての中で最も高い優先度を持たない限り、完全に間違っています実行待機中の実行可能なスレッド。これは、他のすべての状況では、優先度を上げると、壁時計間隔あたりのタイムスライスが増える可能性があるためです。
マイク・ディミックは、数日前にこの回答の問題を指摘し、はるかに良い回答を提供しましたが、最初の回答は不可解にも票を得続けています。作者の主張によると、彼は単に私たちのダミーに対する答えを馬鹿にしただけではありません。なぜなら、それは単純なものでも単純なものでもないからです。
免責事項:私はディミック氏を知りませんが、彼が何について書いているか知っていると言うことができます。
timeBeginPeriod (...)
。通常、ゲームは開始時にこれを1に設定し、システム上で実行されているすべてにボード全体で1ミリ秒のスケジューリング間隔を適用します。それを行ったプロセスだけに孤立しているわけではありません。マルチタスクのためにWindowsを真剣に考えるのが難しい理由の一部です。