2017-02-07 1 views
2

優先順位の異なるアイテムのソースがあり、アイテムを完成する能力が常に飽和しているとします。優先順位の低い項目が完全に枯渇していないことをどのように保証しますか?低い優先順位の作業項目ソースを飢えさせるのを避ける方法

私は、ソースの優先度を、最後にダイナミックな「効果的な」優先度を出すように処理してから組み合わせることができると考えています。そうすれば、優先度の低い情報源はサービスのために十分に高くなるまでゆっくりと引き上げられます。

私は、この問題に対するより洗練された解決策が存在する場合に、少なくとも尋ねることなく、ここで車輪を再発明したくありませんでした。ありがとう!

+0

私はこれに対してさまざまなアドホックな解決策を見てきました。標準的なものがあるかどうかはわかりませんが、問題があります。 Linuxスケジューラは解決する必要があるので、おそらくどこかに多くの文献があります。 –

+0

はい、確かです。私は、実装の詳細(スレッドのスケジューリングなど)にうんざりすることを避けることを望んでいました。しかし、見てみると便利かもしれません。 –

+0

説明や実際の実装をお探しですか? – displayName

答えて

3

考えていることは標準的な考えで、Agingと呼ばれています。

低優先度のジョブが最終的に実行を完了するように、エージングが使用されます。この手法を使用して、優先度の低いタスクの不足を減らすことができます。エージングを実装する方法は数多くありますが、すべて準備完了キューで待機するプロセスの優先順位を上げることと同じ原則があります。優先度の増加は、プロセスの待機時間と同じであってもなくてもよい。


あなたの現在の思考プロセスに優先順位を割り当てることです。一般的には、すべてのプロセスを最小値(または実装に応じて最大値)に入れ、ヒープをポーリングすることでこれを行います。

あるいは、プロセスを優先度に割り当てることができます。これは、優先度タイプ(最高、最高、中、最低、最低など)ごとに複数のキュー/リストを保持することによって行います。

  • 各タイプの複数のキューを保持します。
  • 優先度の高いリストからアイテムを取得して終了するか、ラウンドロビン方式で優先度の高い各プロセスにタイムクォンタムを割り当てます。
    • 優先度の高いリスト内のすべてのプロセスが処理されている場合は、優先度の高いリストに何かが追加されるまで、優先度の低いプロセスを開始します。
    低優先度のプロセスが長時間待っている場合は、その優先度リストから優先度を削除し、次に高い優先度レベルに追加します。

これもオペレーティングシステムで教えられている標準アルゴリズムです。

関連する問題