タスクマネージャーで優先順位はどのように機能しますか?また、いつ設定すべきですか?


30

実際に何が起こるかを確認するために、いくつかのプロセスの優先順位を設定していますが、何を推測しますか...何もありません。すべて同じように実行されます...

Googleで、優先順位は処理速度と実際には関連していないことを発見しましたが、本当ですか?なぜそうではないのですか?プロセスが最高の優先度を持っている場合、それは速くなるべきではありませんか?


4
簡単な答え:When should I set [priorities in Task Manager]? ほとんどありません。
ダンヘンダーソン

2
理解すべきもう1つの重要なことは、優先順位を強制すると、システムが実行できる作業の合計量が減少することです。これが、一般的なデスクトップオペレーティングシステムがリアルタイムオペレーティングシステムではない理由です。また、リアルタイムオペレーティングシステムのように動作させるほど、効率は低下します。中断、たとえば、キャッシュのブローアウト。優先度の低い作業はまだ完了している必要があり、I / Oを奪い合っています。小さいチャンクで効率を下げても、だれにも利益はありません。
デビッドシュワルツ

あなたのコンピューターを考えようとしないでください。あなたは勝ちません。スレッドをあなたよりもはるかにうまく処理する方法を知っています。
b1nary.atr0phy

回答:


52

食料品店の「行の先頭に行く」カードがあるとします。あなたは店に行き、カートに入れて、レジカウンターに行き、誰もいないことを見つけます。あなたのカードは、より早くチェックアウトするのに役立ちますか?いや。

優先度は処理速度に影響しません。優先度の高いプロセスはより高速に実行されず、 CPU時間を使用することさえできません。

これについて本当に話すには、スレッドに言及する必要があります。Windowsではプロセスは「実行」されません。プロセスの一部であるスレッドが実行されます。(プロセスにスレッドが1つしかない場合でも、その区別は外部からはかなり曖昧です。)

(ちなみに、CPUが「4つのコアと8つのスレッド」などを持つマーケティング用語は誤解を招きます。CPUにはコアがありますが、CPUにはスレッドがありません。スレッドはプロセスの一部です。CPUコアハイパースレッディングを有効にしないと1つのスレッドを実行できますが、ハイパースレッディングを有効にすると、コア 2つのスレッドを実行できますが、CPUはスレッドを「持たない」。

各スレッドは、常にいくつかのスケジューリング状態のいずれかになります。最もよく見られる状態は次のとおりです。待機中(* nixはこれを「ブロック」と呼びます。両方のOSでI / Oなどを待機することを意味し、CPU時間を使用せず、不要です)。準備完了(CPU時間を使用したいが、現在使用可能なCPUはありません); および実行中。実行中のスレッドのみがCPU時間を消費します。つまり、プロセスに実行中のスレッドがない場合、タスクマネージャーなどのツールでCPU時間を0%使用していることがわかります。

スレッドは一度に1つのコア(または、ハイパースレッディングが有効になっている場合は「論理プロセッサ」)でしか実行できないため、プロセスは、現時点で実行したいスレッドの数だけCPUコア(またはLP)を使用できます。(システム全体で同じステートメントを作成できます。)

ほとんどのシステムのほとんどのスレッドは、ほとんどの時間を待機状態で過ごします。(これが、システムが何もしていないときにアイドルプロセスがCPU時間の95%を超えている理由です。)例外は、ビデオや3Dレンダリング、ゲームなどの「動作する」スレッドです。 CPUの100%を実際に使用できます。一般に、どこかから読み取る必要のある入力データを処理する必要があり、通常どこかに書き込む必要がある出力データを作成するためです。また、時間の経過とともにメモリ内の多くの異なるデータを参照する場合があり、ハードページフォールトが解決されるまで待機する必要がある場合があります。

しかし、ビデオレンダリングや3Dイメージレンダリングなどの処理を行うスレッドは、ほとんどすべての時間をCPUで「計算」し、I / Oをほとんど待機しません。このようなスレッドは、多くの場合「コンピュートバウンド」と呼ばれ、全体的なパフォーマンスは主にCPU速度によって制限されます。

タスクマネージャで行う設定は、実際にはプロセス内のすべてのスレッドの「基本優先度」を確立します。スレッドの実際の、または「現在の」優先順位は高くなる場合があります(ただし、ベースより低くなることはありません)。それについては後ほど詳しく説明します。スケジューリングの決定(「誰がどのCPUで実行するか」)は、常にスレッドの現在の優先順位を使用して行われます。優先度は、準備完了スレッドと実行中のスレッドでのみ意味があります(逆に言えば、待機スレッドで優先順位意味がありません)。

Windowsはプリエンプティブスケジューリングアルゴリズムを使用します。システム内の1つのスレッドのみがCPU時間を使用したい場合、その優先順位が少しでも重要ではありません。CPUの100%を取得します。優先度の高いスレッドが実行された場合に備えて、優先度の低いスレッドが実行されているときに、スケジューラがCPUの能力の一部を「抑制」するわけではありません。

2つのスレッドがCPUを使用する必要があり、それらの優先順位が同じである場合、「タイムスライス」と呼ばれる方法でスケジュールされ、時間の経過とともに、それぞれがCPU時間の約50%を取得します。一方、優先順位が異なる場合、優先順位の高いスレッドは100%を取得し、下位のスレッドは何も取得しません

(実際には、4〜5秒ごとに数十ミリ秒程度の周期的な「飢star回避優先度ブースト」が発生するため、まったく何も得られません。しかし、これは実際には「高優先度」の例外ではありません飢えたスレッドの優先度を調整することで行われます。)

CPUコアが複数ある場合、事態はより面白くなり、優先順位は一般的にあまり効果がありません。実行したい2つのスレッドがあるとします。そして、これらのスレッドと同等またはそれ以上の優先順位の処理を行っていない2つ以上のCPUコアがあるとします。次に、それぞれの優先順位に関係なく、2つのスレッドがそれぞれコアの100%を取得します。

(スーパーマーケットには2人が現れます。2人のチェッカーが無料です。顧客の1人が「行の先頭に行く」カードを持っています。問題ではありません。)

tl; drバージョン(これまで):優先順位は「誰がCPU時間のどの割合を取得するか」ではなく、「誰が最初に実行するか」に関するものです。

ここでは、HTがオフになっている場合にコアを処理するのとほぼ同じ方法でWindowsがコアの2つの「論理プロセッサ」のそれぞれを処理するということを除いて、ここではハイパースレッディングについて詳しく説明しません。つまり、この例外を除いて「実際の」CPUとして扱われます。Windowsは、コアで一度に複数のLPを使用しないように非常に努力します。つまり、通常は、コアのを超えるスレッドがすべて同時に実行しようとするまで、コアの両方のLPが使用されているのを見ることはありません。これは、2つの「論理プロセッサ」が単一の非ハイパースレッドコアの2倍のパフォーマンスを提供しないためです。

「基本優先度」について:Windowsは、スレッドの最近の実行内容に基づいて、スレッドの現在の優先度を調整(「ブースト」および「ディケイ」)します。I / O操作を最近完了したスレッドは、通常、ベースの1つまたは2つ上のノッチになります。多くの場合、UIスレッド(ウィンドウを実行しているスレッド)はかなり高くなります。通常、CPUバウンドスレッドはベースになります。これの目的は、プログラムのUIで応答性を維持し、IO要求がディスクなどに流れるようにすることです。

プログラム(プロセス)は、プロセスの優先度(タスクマネージャーで設定したもの)によって決定される範囲内で、各スレッドの基本優先度を変更することもできます。しかし、プログラムの大部分は気にしません。(それらの多くはすべきです。)

他にも起こっていることがあります。優先度のブースト/ディケイ、およびマルチプロセッシングシステム(マルチコア、ハイパースレッド、またはその両方)は最近非常に一般的であり、Windowsでは常にバックグラウンドで実行されているものがあるため(ただし、CPU時間をあまり使用しないことを願っています)、また、ハードとソフトの両方の「アフィニティ」の影響により、テストケースを実行して、ここで予測される正確な結果を取得することは困難です。しかし、これは正しい写真に近いものになるはずです。

結論として...

ほとんどの項目を「通常」のままにしておくのが妥当です。そうしないと、OSのディスクキャッシュフラッシュ機能のように、(存在することを知らなくても)本当に使いたいものを簡単に飢えさせることができます。確かに、OSのプロセスの多くはNormal以外にあり、Windowsが配置した場所に残しておく必要があります。

タスクマネージャーを使用して優先順位をいじるのに適したケースは、CPUを占有するタスク(ビデオや3Dレンダリングなど)があり、実行中にシステムの使用が遅くなる場合です。正しいことは、それを信じるかどうかにかかわらず、優先順位を1つまたは2つ下げることです。それは他の何も望まないすべてのCPUサイクルを喜んで使用しますが、システムのインタラクティブな使用の邪魔をしません。作業を完了するのに少し時間がかかる場合がありますが、他のプログラムのインタラクティブな使用への干渉を最小限に抑えて作業を完了します。そのトレードオフが気に入らなければ、やらないでください!ただし、「高速化する」ために優先度を高く設定すると、UIが完全にハングアップする可能性があります。

いわゆるリアルタイム優先度クラスには何も設定しないでください。

(編集-この段落を追加)わかりました、それは極端な声明です。(「普遍的な主張は真実ではありません-これを除いてではありません。」)少なくとも、非常に慎重な検討なしではありません。あなたの目標が何かをより速く走らせることであるならば、それはおそらく役に立たないでしょう。ただし、システムを「ハードロック」する場合があります(リセットが必要、または最新のマシンでは電源の再投入が必要です)。または、ハードロックされる可能性があるほど応答しないようにします。

nb:ビデオプレーヤーアプリはすべて、Vista以降の「マルチメディアクラススケジューリング」機能を選択する必要があります。これにより、比較的短い間隔で計算されたCPUの最大80%が自動的に割り当てられます。それでグリッチのない再生ができない場合は、何かが非常に間違っています。

詳細については、Solomon、Russinovich、およびIonescuによるWindows Internals 6th Editionのスレッドとスケジューリングに関する章を参照してください。

プロセスとスレッドの優先度の設定方法、およびタスクマネージャの[優先度]列の意味については、こちらの回答も参照してください。


1
ちなみに、以下のリンクされた質問に対する私の答えは関連していますsuperuser.com/questions/949030/...
ジェイミー・ハンラハン

1
ちなみに、「スケジューリング」、「スケジューラ」などは、ここで実行するスレッドと実行するCPUを決定するWindowsカーネルルーチンを指します。「タスクスケジューリング」ではなく、特定の時間に、またはさまざまなトリガーに応じてプロセスを起動することです。
ジェイミーハンラハン

@JamieHanrahan OK私はそれをここに移動:superuser.com/questions/1380473/...
Julien__

5

優先順位を変更すると、オペレーティングシステムが実行中のアプリケーションにCPU時間を割り当てる方法が変わります。全体的なCPU使用率が高い場合にのみ、顕著な効果が得られます。

たとえば、ビデオをエンコードし、同時に別のビデオを視聴します。おそらく、エンコーディングアプリケーションは、すべてのCPUコアで100%の計算能力を利用します。その結果、他のアプリケーションが途切れることがあります。

Windowsはデフォルトで、両方のアプリケーションに等しい「通常」優先度を与えます。この時点で、ムービープレーヤーソフトウェアの優先度を上げることができます。この方法では、エンコードソフトウェアがビデオプレーヤーと比較してバックグラウンドプロセスに低下するため、ビデオのエンコードが遅くなりますが、スムーズなビデオ再生が可能になります。


「同様に、エンコーディングアプリケーションはすべてのCPUコアで100%の計算能力を利用します。」これは、少なくともコア数のエンコーディングスレッドが存在する場合にのみ可能です。
ジェイミーハンラハン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.