我正在编写一个非阻塞客户端,它使用选择器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 开销,因此最好处理大块而不是小块。添加一个小的睡眠(20 毫秒)会有所帮助,但显然会限制可伸缩性,因为我需要同时处理数千个流。