Get / SetThreadPriorityメソッドに出くわしたばかりですが、疑問に思いました。スレッドの優先度を、所有しているプロセスの優先度よりも意味のある高さに設定できますか(プログラムで同じように変更できるとは思いません)。
これらのAPIを使用する際の落とし穴はありますか?
Get / SetThreadPriorityメソッドに出くわしたばかりですが、疑問に思いました。スレッドの優先度を、所有しているプロセスの優先度よりも意味のある高さに設定できますか(プログラムで同じように変更できるとは思いません)。
これらのAPIを使用する際の落とし穴はありますか?
はい、スレッドの優先度は、現在のプロセスのクラスよりも高いクラスを含む、任意のクラスに設定できます。実際、これら2つの値は補完的であり、スレッドの基本優先度を提供します。あなたが投稿したリンクの備考セクションでそれについて読むことができます。
SetPriorityClassを使用してプロセスの優先度を設定できます。
技術が邪魔になったので、スレッドの優先順位を直接操作することはほとんど役に立ちません。OSスケジューラーは、CPU計算を実行するスレッドよりもI / Oでブロックされるスレッドの優先順位を上げるのに十分なほど洗練されています(I /O割り込みが到着したときにI/OスレッドがCPUスレッドをプリエンプトするまで)。実際、I / Oスレッドでさえも差別化されており、たとえば、キーボードI/OスレッドはファイルI/Oスレッドよりも優先度が高くなっています。
Windowsでは、スレッドとプロセスの優先順位は、全体的なスケジューリングの優先順位を決定するアルゴリズムを使用して結合されます。
落とし穴?上手:
スレッドの優先度を上げると、通常IOでブロックされている場合に全体的なゲインが最大になる可能性がありますが、ドライバーからのシグナルを受けてできるだけ早く実行する必要があります。バッファを迅速に処理する必要があるビデオIO。
スレッドの優先度を上げると、CPUにバインドされ、高い優先度に上げられた場合に全体的に最大の悪影響が生じる可能性があります。そのため、通常の優先度のスレッドの実行が妨げられます。極端な場合、OSスレッドやTaskMangerなどのユーティリティは実行されません。