我是Retrofit 2库的新手,我想知道:可以容纳等待队列的最大呼叫数量是多少?
它是否使用PriorityBlockingQueue这是一个自增长队列?
答案 0 :(得分:1)
这个问题使我想深入研究Retrofit
源代码。这是我的结果,这可能不正确,但我想分享。如果找到更好的答案,请纠正我!
该代码包含okhttp3.Dispatcher
类的maxRequests
信息,并且它们使用Deque
而不是PriorityBlockingQueue
:
public final class Dispatcher {
private int maxRequests = 64;
private int maxRequestsPerHost = 5;
....
如文档所述:
每个调度程序都使用
ExecutorService
在内部运行调用。如果您提供自己的执行器,则它应该能够同时运行{@linkplain #getMaxRequests the configured maximum}
个调用。
这意味着并发调用的最大数量取决于您执行的操作:
ExcutorService
(通过使用OkHttpClient.Builder
),则可以通过setMaxRequests
函数设置其maxRequests
的值。executorService
和默认的 64 同时请求。编辑:
有关您问题的更多信息 可以容纳等待队列的最大呼叫数量是多少? ,您可以在Dispatcher
中看到此功能代码课:
synchronized void enqueue(AsyncCall call) {
if (runningAsyncCalls.size() < maxRequests && runningCallsForHost(call) < maxRequestsPerHost) {
runningAsyncCalls.add(call);
executorService().execute(call);
} else {
readyAsyncCalls.add(call);
}
}
如果达到runningAsyncCalls
个队列大小maxRequests
(并发请求),则新的call
将被添加到readyAsyncCalls
,并且此queue
没有限制大小,这意味着最大通话价值将为 Integer.MAX_VALUE
。