OkHttp:根据线程数不增加总体速度

时间:2017-12-13 14:12:08

标签: java multithreading okhttp3

使用OkHttp3时遇到问题。

基本上我的项目创建了大约50个线程。这些线程共享以下客户端:

private final OkHttpClient CLIENT = new OkHttpClient().newBuilder()
            .readTimeout(10000, TimeUnit.MILLISECONDS)
            .connectTimeout(10000, TimeUnit.MILLISECONDS)
            .writeTimeout(10000, TimeUnit.MILLISECONDS)
            .followRedirects(false)
            .followSslRedirects(false)
            .build();

每当线程尝试通过HTTP下载网页时,它都会执行以下代码:

Request request = new Request.Builder()
            .url(someURLString)
            .build();
Call call = CLIENT.newCall(request);
try (okhttp3.Response okHTTPResponse = call.execute()) {
    // handling the downloaded page here
}

我的问题是,当我将线程增加到100个线程甚至200个线程时,整体速度保持不变。但是,当我运行我的项目2次甚至4次时,我的整体速度提高了x2或x4倍。

以整体速度表示每秒下载网页的平均数量。

正如OkHttp3文档所述,execute对HTTP连接的数量没有限制,但不知何故看起来我的代码仍然受到某种我不知道的限制的限制。 / p>

还有一件事,当我创建200个线程时,我创建了一个简单的日志记录,其中一个线程在它开始并完成下载网页时打印一条日志消息,我注意到只有带有ids<的线程。 30实际上是打印日志消息,这意味着其他线程实际上并没有执行任何任务。

另外,根据上面提到的日志,我设法计算处理一个页面所需的平均时间,每个网页大约0.5秒。

我在36核的服务器上运行我的程序,互联网速度为1 Gb,因此CPU速度和互联网应该不是问题。

任何人都可以帮我解决这个问题或者在我的方法中指出问题吗?

0 个答案:

没有答案