私の質問がばかげている場合は申し訳ありません。
ArrayBlockingQueue を使用しています。
private ArrayBlockingQueue<RequestParameters> processorQueue;
private int sizeOfQueue = 3000;
ここで、私の Producer は別のスレッドで、 Consumer は別の Thread です。どちらもシングル プロデューサー - コンシューマー スレッド モデルで実行されています。
現在、サーブレットにリクエストを送信する Java アプリを実行しています。プロデューサーはリクエストをキューに入れました。コンシューマーはリクエストを取得し、DB 操作を含む処理を開始します (タスクの完了には約 1 秒かかります)。
ここで、My Producer は非常に高速にリクエストを取得し、Queue をいっぱいにして、Consumer が処理を開始し、Queue にスペースを作るまで待ちます。
ここでの私の質問は
- 最高のパフォーマンスを得るには、どの BlockingQueue Impl を使用する必要がありますか。
- Queue Size が Full の場合に何が起こるかというと、Producer が Queue が Vaccant になるのを待っているかどうかに関係なく、Servlet がリクエストを受け取ることを意味します。これらのすべての受信リクエストはどうですか? それらの要求はどこに行きますか?それらのリクエストはJVMメモリに保存され、ノンブロッキングになったらプロデューサースレッドに渡されますか?
ありがとう。