OkHttp架构图
OkHttp的整体架构如下图所示,其中Dispatcher处RealCall和拦截器之间。
Dispathcer 整体分析
Dispatcher是保存同步和异步Call的地方,并负责执行异步AsyncCall。
如下图所示,针对同步请求,Dispatcher使用Deque runningSyncCalls保存了同步任务;针对异步请求,Dispatcher使用Deque runningAsyncCalls用来保存正在执行的请求,使用Deque readyAsyncCalls保存准备执行的请求,为什么针对异步请求要使用两个队列呢?因为Dispatcher默认支持最大的并发请求是64个,单个Host最多执行5个并发请求,如果超过该限制,则Call会先被加入到readyAsyncCall中,当出现空闲的线程时,再将readyAsyncCall中的线程移入到runningAsynCalls中,执行请求。