0

タスク スティーリングスケジューラーの代わりに、スケジューラータスク委任スケジューラーを実装しました 。したがって、このメソッドの基本的な考え方は、各スレッドが独自のプライベート ローカル キューを持っているということです。タスクが生成されるたびに、タスクがローカル キューにエンキューされる前に、キュー間で検索操作が実行され、キューの各サイズを比較して最小サイズのキューが検出されます。この最小サイズのキューがタスクのエンキューに使用されるたびに。これは、ビジー状態のスレッドのキューから作業のプレッシャーをそらし、最もビジーでないスレッドのキューにジョブを委譲する方法です。

このスケジューリング手法の問題点は、各タスクが完了するまでにかかる時間が分からないことです。すなわち。キューのカウントが最小であっても、タスクはまだ動作している可能性があります。一方、キューのカウンターの値が高くても、タスクはすぐに完了する可能性があります。この問題を解決するためのアイデアはありますか?

私は、マルチレート同期データ フロー パラダイムを実装する独自のマルチスレッド ライブラリで、Linux、C++ プログラミング言語に取り組んでいます。

4

2 に答える 2

1

あなたのスケジューリング ポリシーは当面の仕事に合わないようです。通常、タスクの完了時間を無視するこのタイプの単純なスケジューリングは、タスクの実行時間が比較的等しい場合にのみ関連します。いくつかの調査を行うことをお勧めします。Wikipedia の Scheduling の記事から始めるのがよいでしょうが、もちろんそれは氷山の一角にすぎません。また、タスク操作をタイムスライスすると、タスクの「履歴」を考慮してキュー管理を細かくできるため、タスク委任の要件についても 2 番目 (および 3 番目) に考えます。ただし、各クライアントが一貫して同じ「タイプ」のタスクを送信するようにクライアントが設計されている場合は、この知識で同様の結果を得ることができます。

于 2013-02-13T14:45:00.453 に答える
0

待ち行列理論のクラスで覚えている限りでは、(すべての中で) 最も公平なシステムは、単一の待ち行列と複数のサーバーを備えたシステムです。このようなシステムを使用すると、すべてのタスクの平均実行時間が最小になり、使用率が最大になります (動作時間の割合、用語が正しいかどうかはわかりません)。

つまり、優先度の高いタスクがない限り、タスク委任スケジューラの実装を再検討してください。

于 2013-02-13T14:32:56.773 に答える