SelectionKey.OP_READ
セレクターとselector.select()
呼び出しを使用してネットワークソケットからデータを読み取る非ブロッキングクライアントを作成しています。読み取り部分は次のように処理されます。
if (selectionKey.isReadable()) {
int len = inChannel.read(buf);
System.out.println(len);
. . .
}
私が見ている問題は、ダウンロードが進むにつれて読み取りサイズ(len
)が徐々に縮退していることです。
1290
1290
1290
480
318
28
28
28
28
28
28
28
28
28
28
28
28
28
なぜこれがなぜであり、それを改善する方法を誰かが知っていますか?もちろん、そのまま動作しますが、CPUのオーバーヘッドを減らす必要があるため、小さなチャンクではなく大きなチャンクを処理するのが最適です。小さなスリープ(20ms)を追加すると役立ちますが、数千のストリームを同時に処理する必要があるため、スケーラビリティが明らかに制限されます。