我正在使用名为Scribe的小型Java库执行多线程HTTP请求。 Scribe使用HTTPUrlConnection
发出请求,并将结果InputStream
读取到String。缓冲区大小为65kb,但响应大小通常为2MB,但我怀疑这是一个影响因素。
当每个HTTP请求运行10个线程时,我的CPU使用率在所有4个核心上最大化。从分析中我可以看到,大约60%的CPU用于调用HttpUrlConnection.getResponseCode();
(可能等待响应),并且大约20%的时间用于调用StreamUtils中的InputStream.read()
。
在jVisualVM中,我可以看到线程是"正在运行"整个时间。我认为在执行I / O以释放CPU资源时,底层类将有一种阻塞线程的方法,但我想我的理解在这里有点不稳定。
执行并行HTTP请求的更有效方法是什么?