新しいjavanioライブラリの主要コンポーネントとしてtcpフロー制御を取得したいと思います。このように動作します...
- ライブラリは、データをListener.incomingData(DataChunk dataChunk);に起動します。
- dataChunk.processed()が呼び出されるまで、ライブラリはデータが存在する場合でもそれ以上データを起動しません。
- 通常、最初のいくつかのdataChunkでprocessed()メソッドを呼び出すことができますが、メッセージの最後の1つで、リモートソケットに書き込み、コールバックハンドラーを指定します。
- 書き込みコールバックが呼び出されたら、最後のdataChunk.processed()を呼び出して、tcpフロー制御を再度解除します。
大きな注意:ステップ2は、NICバッファーから読み取らない場合に、tcpフロー制御が自動的に開始される場所です。これはすべて自動です(Java nioでテストしました)。ただし、問題は、ポーラーが解放を停止し、このソケットを除く他のすべてのソケットでデータを待機する状態にキーをどのように配置するかです。最後のdataChunkが処理されていないことがわかり、無視されるため、新しいデータがあるときにリリースされてもかまいませんが、ポーラースレッドが100%CPUを循環することは望ましくありません。この潜在的なオープンソースのnioフレームワークを使用して、任意のサーバーの自動スロットリングを実現できるように、これを実現する方法はありますか。