したがって、私の現在のJava実装は次のとおりです。
- スレッドを使用して UDP ソケットから UDP パッケージを受信し、パケットを非ブロッキング キューに入れます。
- 300 のスレッドの 1 つがこの非ブロッキング キューを読み取り、このパケットを TCP ホスト/ポートに接続されたソケットへの要求として処理します。
- 応答を待って、これを UDP ソケットに返します。
この部分はすべて問題なく動作しますが、高負荷時の TCP ソケット部分の分析から、TCP ソケット部分が完了するまでに約 2 ~ 5 秒かかるランダムなケースがあることがわかりました。通常、この部分には 2 ~ 3 ミリ秒かかります。私の疑問は、ランダムなスレッド実行で TCP ソケットをヒットしているだけで、スレッド操作の FIFO がないことです。
「要求」情報と現在のスレッド参照 (「応答」を処理するスレッドを知っていると思います) を FIFO ブロッキング キューに配置して、TCP ソケット要求を確実にするために最も古いスレッドが最初に処理されるようにする方法はありますか? /response 操作にかかる時間は最小限です。