2011-08-04 13 views
0

これは一般的な質問です。 は、さまざまな優先度を持つスレッドがあるシナリオを考えてみましょう。 このようなシナリオでは、優先順位が最も低いスレッドは、共有が常に優先順位の高いスレッドに移動するため、リソースの制御権を得ることはありません。 とにかく優先度の高いスレッドをバイパスし、優先度の低いスレッドにリソースを与えることができますか?常に優先度の低いスレッドに制御を与える

答えて

0

の組み込みメカニズムは、スレッドの優先度がです。オペレーティングシステムに対して、そのアクティビティーが「あまり重要でない」ことを示すスレッドに低い優先順位を設定し、より重要な(優先順位の高い)スレッドを実行する必要がある場合は、それらのスレッドが優先されます。

スレッドが潜在的にCPU時間を必要としないようにするには、優先度の低いスレッドであってはなりません。

+0

私のスレッドは低い優先度でなければならないと考えています(同期のタスクを実行するとバックグラウンドで言うことができ、優先度は低くなければなりません)。 – Yogi

+0

なぜそれは低い優先順位でなければならないのですか? – Iridium

+0

これは時間的に重要ではないため、ユーザー入力(キーを押す、電話を受ける...など)を行うことができます。 – Yogi

0

必ずしもそうである必要はありません - それは優先度の実装に依存します。あなたがそれを記述する方法は、優先度の高いスレッドが完了して実行時間から優先度の低いスレッドを奪うまで実行され続けることを前提としています。

これはこれを実装する方法の1つかもしれませんが、より公平なポリシーは、代わりにタイムスライスの共有を行うことです。したがって、優先順位は、各スレッドがどのくらいのCP​​U時間を取得するかを決定し、必ずしもそれらが実行される順序ではありません。

これは、スケジューラの責任です - あなたは、これは、オペレーティング・システムに実装されているかを考える場合は、優先度の低いスレッドが違いを実行してやることがわかりますWikipedia:Scheduling

0

彼らはここで以下の合計タイムスライスを与えられているということです実行する。優先度の低いスレッドは、システムがリソース不足の場合でも常に実行されます。あなたが見るかもしれない唯一の事は、より優先度の高いスレッドが動く限り、それが動かないことです。もっと知りたければ、オペレーティングシステムがプロセスとスレッドをスケジュールするために使用できるさまざまな方法を調べることをお勧めします。

プログラミング言語でこれを行うことを考えている場合は、スレッドの優先度を変更して、実行するたびに処理を進めることができます。通常は、タイムクリティカルではないバックグラウンドイベントを実行する優先度の低いスレッドがあります。スレッドがより重要なスレッドと同じくらい時間を要したくない場合もあります。

+0

いいえ、あなたは「niceness」について話しています。 「リアルタイム優先度」はOPのように振る舞います。 –

+0

彼が話しているスケジューラに依存します。一部のスケジューラーは、システムが停止した場合に、優先度の低いスレッドに時間を与えることはありません。公平なプロセススケジューリングは、すべてのスレッドに一定の時間がかかることを保証しますが、その量は優先順位に依存します。 –

0

明らかに存在します。待っている。より高い優先順位のスレッドが何か(ロック、データ、ファイル、ユーザーまたはネットワークからのデータ、タイマーなど)を待っている場合は、実行可能ではないため、次に優先度の高いスレッドが実行されます。

また、非リアルタイム優先度は通常可変数です。スケジュールされたプロセスの優先順位は、すべてのプロセスでゆっくりと増加する一方で減少します(別の調整可能なファクタまで)。そうすれば、何も待たないスレッドがいくつかあっても、スケジューラがCPUに最長でないスレッドを選ぶたびに、待機中のスレッドは、待っている間に高い優先度で収集されたため、リソースが使用可能になったときに即座にスケジュールされます(そうしないと、すべてのCPUを使用しているバックグラウンドプロセスにユーザーインターフェイスが応答します)。

+0

そのように私はいくつかのスレッドを持っていると私のスレッドは、priority.Allスレッドは一度に状態を待つことは決して最も低いと唯一のものです。公平な共有ポリシーを持っていても、私のスレッドは時間を節約できます。 – Yogi

+0

@ Yogi:はい、スレッドの共有時間が短くなります。動的優先度(「公平スケジューラ」)により、適切に低い割合が得られます。ハード "リアルタイム"の優先順位で、それは何も得られません。それがこれらのシステムの定義方法です。様々なOSにはどちらか一方または両方があり、「fair」はそれぞれ異なって動作し、多かれ少なかれ公平です。 –

関連する問題