これは一般的な質問です。 は、さまざまな優先度を持つスレッドがあるシナリオを考えてみましょう。 このようなシナリオでは、優先順位が最も低いスレッドは、共有が常に優先順位の高いスレッドに移動するため、リソースの制御権を得ることはありません。 とにかく優先度の高いスレッドをバイパスし、優先度の低いスレッドにリソースを与えることができますか?常に優先度の低いスレッドに制御を与える
答えて
の組み込みメカニズムは、スレッドの優先度がです。オペレーティングシステムに対して、そのアクティビティーが「あまり重要でない」ことを示すスレッドに低い優先順位を設定し、より重要な(優先順位の高い)スレッドを実行する必要がある場合は、それらのスレッドが優先されます。
スレッドが潜在的にCPU時間を必要としないようにするには、優先度の低いスレッドであってはなりません。
必ずしもそうである必要はありません - それは優先度の実装に依存します。あなたがそれを記述する方法は、優先度の高いスレッドが完了して実行時間から優先度の低いスレッドを奪うまで実行され続けることを前提としています。
これはこれを実装する方法の1つかもしれませんが、より公平なポリシーは、代わりにタイムスライスの共有を行うことです。したがって、優先順位は、各スレッドがどのくらいのCPU時間を取得するかを決定し、必ずしもそれらが実行される順序ではありません。
これは、スケジューラの責任です - あなたは、これは、オペレーティング・システムに実装されているかを考える場合は、優先度の低いスレッドが違いを実行してやることがわかりますWikipedia:Scheduling
彼らはここで以下の合計タイムスライスを与えられているということです実行する。優先度の低いスレッドは、システムがリソース不足の場合でも常に実行されます。あなたが見るかもしれない唯一の事は、より優先度の高いスレッドが動く限り、それが動かないことです。もっと知りたければ、オペレーティングシステムがプロセスとスレッドをスケジュールするために使用できるさまざまな方法を調べることをお勧めします。
プログラミング言語でこれを行うことを考えている場合は、スレッドの優先度を変更して、実行するたびに処理を進めることができます。通常は、タイムクリティカルではないバックグラウンドイベントを実行する優先度の低いスレッドがあります。スレッドがより重要なスレッドと同じくらい時間を要したくない場合もあります。
いいえ、あなたは「niceness」について話しています。 「リアルタイム優先度」はOPのように振る舞います。 –
彼が話しているスケジューラに依存します。一部のスケジューラーは、システムが停止した場合に、優先度の低いスレッドに時間を与えることはありません。公平なプロセススケジューリングは、すべてのスレッドに一定の時間がかかることを保証しますが、その量は優先順位に依存します。 –
明らかに存在します。待っている。より高い優先順位のスレッドが何か(ロック、データ、ファイル、ユーザーまたはネットワークからのデータ、タイマーなど)を待っている場合は、実行可能ではないため、次に優先度の高いスレッドが実行されます。
また、非リアルタイム優先度は通常可変数です。スケジュールされたプロセスの優先順位は、すべてのプロセスでゆっくりと増加する一方で減少します(別の調整可能なファクタまで)。そうすれば、何も待たないスレッドがいくつかあっても、スケジューラがCPUに最長でないスレッドを選ぶたびに、待機中のスレッドは、待っている間に高い優先度で収集されたため、リソースが使用可能になったときに即座にスケジュールされます(そうしないと、すべてのCPUを使用しているバックグラウンドプロセスにユーザーインターフェイスが応答します)。
そのように私はいくつかのスレッドを持っていると私のスレッドは、priority.Allスレッドは一度に状態を待つことは決して最も低いと唯一のものです。公平な共有ポリシーを持っていても、私のスレッドは時間を節約できます。 – Yogi
@ Yogi:はい、スレッドの共有時間が短くなります。動的優先度(「公平スケジューラ」)により、適切に低い割合が得られます。ハード "リアルタイム"の優先順位で、それは何も得られません。それがこれらのシステムの定義方法です。様々なOSにはどちらか一方または両方があり、「fair」はそれぞれ異なって動作し、多かれ少なかれ公平です。 –
- 1. スレッドでスレッドの優先度を低くする
- 2. スカラの優先順位が低く優先度が低い
- 3. Linuxスレッド優先度、動作が異常
- 4. 最低優先度のコアでスレッドを実行する
- 5. Git Towerホットキー(低優先度)
- 6. 低優先度Express.js app.get( '/ route');
- 7. スレッドの優先度とスレッドの精度
- 8. sklearn.KNeighborsClassifierは非常に低い精度のスコアを与えます
- 9. Pythonスレッドのスケジューリング優先順位の制御?
- 10. Doctrineイベントのサブスクライバ優先度を制御する方法
- 11. 優先度設定のスレッド
- 12. アンドロイド - onTouchに優先度を与えるonClick
- 13. ボタンに優先度を与える方法
- 14. スレッドの優先度を変更する
- 15. 優先度の低いスレッド/プロセスでOracleインデックスを作成できますか?
- 16. なぜモデルは84%の高い精度を与えるが、非常に低いAUC 13%を与えるのか?
- 17. レイアウト制約に優先度を追加
- 18. ブラケットの優先順位を与える
- 19. 通常の優先順位プロセスで、単一スレッドの優先度を15以上に設定できますか?
- 20. スレッドの優先度を変更 - Unity 3d
- 21. 優先度の低いバックグラウンドスレッドを実現するためのパターン?
- 22. POSIXでのスレッドの優先度
- 23. mysql、特定の値を持つセルに優先度を与える方法
- 24. GCDスケジューリング/スレッド間の優先度
- 25. PHP array_merge空の値は常に優先順位が低く
- 26. UIスレッドのスレッド優先度はどのくらいですか?
- 27. FREETEXTTABLEを使用して列に優先度/重みを与える
- 28. nice()は、スレッドの優先度やプロセスの優先度を変更するために使用されますか?
- 29. QtのGUIスレッドに優先度を設定する
- 30. メインスレッドで優先度の低いタスクをスケジュールします
私のスレッドは低い優先度でなければならないと考えています(同期のタスクを実行するとバックグラウンドで言うことができ、優先度は低くなければなりません)。 – Yogi
なぜそれは低い優先順位でなければならないのですか? – Iridium
これは時間的に重要ではないため、ユーザー入力(キーを押す、電話を受ける...など)を行うことができます。 – Yogi