次のワークフローでプロジェクトに取り組んでいます。
パート 1:
- イベントは非同期に到着し、ブロッキング キューに入れられます。これをQ1と呼びます
- スレッドは、そのキューから次に利用可能なアイテムを取得します
- アイテムは {N} 個のタスクを並行して実行することになります
- 各タスクはその結果を 2 番目のキューに入れます。これをQ2と呼びます。
- アイテムの処理が終了すると、次のアイテムがキューから読み取られます。
パート2:
- 別のスレッドがQ2から一度に 1 つのオブジェクトを読み取り、結果を処理します。
したがって、ここでの問題は、最初のキューのすべてのアイテムが多数のタスクを並行して実行することになり、各タスクがその結果をキューに入れることです。2 番目のキューは、一度に 1 アイテムずつ順次処理する必要があり、フラッディングされています。
私の質問
Q2の項目数が特定のしきい値を下回るまで、 Q1を処理するスレッドを待機させるメカニズムが必要です。これを達成するための最良の方法は何ですか?ポーリング ソリューションではなくイベント ドリブン ソリューションを使用する方法はありますか?