私は、数百のデバイスに関連付けられた数千のタスクを実行するアプリケーションに取り組んでおり、各タスクの実行開始までに 5 ミリ秒未満、完了までに平均 100 ミリ秒かかります。
条件は次のとおりです。
- 各デバイスは、一度に 1 つのタスクしか処理できません。たとえば、1 つのタスクは、後続のタスクが処理される前に、割り当てられたデバイスで実行を終了する必要があります。
- スケジューラは効率的でなければなりません。現在、特定のデバイスのワーク キューの処理には、そのタスクの合計よりも時間がかかります。
現在の実装の基本的な説明は次のとおりです。
各デバイスには、そのデバイスに関連付けられたタスクで満たされたワーク キューが含まれています。
タスクがキューに入れられると、そのデバイスの作業キューがグローバル実行キュー (キューのキュー) に配置されます。グローバル実行キューは、デバイスのタスク オブジェクトをデキューし、1 つを処理してから、グローバル実行キューの後ろにデバイス キューを配置するワーカー スレッドによって消費されます。その特定のデバイスが再びキューから取り出されると、ワーカー スレッドはタスクが完了したかどうかを確認し、完了した場合は次のタスクが実行されます。このプロセスは、すべてのデバイス キューからグローバル ランキュー内のタスクがなくなるまで続きます。
改善のための提案はありますか?私はこれを明確に述べましたか?そうでない場合はお知らせください。明確にするために最善を尽くします。
ご覧いただきありがとうございます。よろしく。