1

コンシューマー用の ThreadPool を使用してプロデューサー - コンシューマー パターンを実装したいと考えています。リクエストの 1 つのプロデューサーと、着信リクエストを処理する複数のコンシューマーを用意します。スレッドプールを使用してコンシューマーを実装するとき、プロデューサーがリクエストを送信してからそれらを Cosumers ThreadPool に渡すための独自のキューがまだ必要なのか、それともプロデューサーに直接 ThreadPool キューに渡す必要があるのか​​ を質問します。

最後の問題は、ThreadPool キューに渡すことができるタスクの数と、その速度です。プロデューサは、コンシューマ スレッドに渡す前に「前処理」作業をかなり高速に実行する必要があります。

Producer - Consumer スレッドの間に Queue がある場合、これ以上制御できなくなりますか?

これは、高いパフォーマンスが必要で、多数の着信クライアント要求を処理する必要があるサーバー アプリケーション用です。(一度に数百)。

どんなアドバイスでも大歓迎です!

4

1 に答える 1

1

プロデューサとスレッドプールの間のキューには、1 つまたは 2 つの追加のコンテキスト スイッチが必要です。スレッドプールは空のキューで待機してから、コンシューマ スレッドにディスパッチする必要があります。最後に、コンシューマーをスレッドプールに戻す必要があります。ディスパッチと終了処理は、メッセージ クラスで管理できます。
すべてのコンシューマー スレッドがキューで待機している状態で、リスナーの 1 つが消費し、準備が整うまでリッスンを停止します。すべてのコンシューマーがビジー状態の場合、次のメッセージは最初のコンシューマーの準備が整ったときに処理されます。
したがって、前者は、余分なコンテキストスイッチのコストを伴い、もう少し予測可能な動作をします。

于 2010-10-04T12:18:24.443 に答える