[置顶] 【Android okhttp源码解析 四】任务调度核心类dispatcher解析
2018-04-01 00:28
375 查看
okhttp如何实现同步异步请求,这就是由dispatcher来管理的。我们来借助一张图来理解一下dispatcher工作原理
每当有网络请求Call时,dispatcher会把这个请求推送到readyAsyncCalls队列中,而okhttp相比其他网络请求框架的高效之处就在于它内部维护了一个线程池,来高效地执行网络请求。我们来看下dispatcher源码。
(1)runningAsyncCalls队列
这是正在执行的异步请求队列。从注释来看,它包含了已经取消但没有执行完成的异步请求。
(2)readyAsyncCalls队列
这是就绪状态的异步请求队列。当异步请求不满足某些条件时,就会进入到该队列来进行缓存,如果条件再满足后,就会把这个队列里的请求放到runningAsyncCalls队列。
(3)runningSyncCalls队列
这是正在执行的同步请求队列。
我们来思考一下,同步请求只维护了一个队列,异步请求为什么要维护两个队列?我们这里理解为生产者和消费者模型,我们的分发器Dispatcher对应为生产者,我们的线程池ExecutorService对应为消费者池,所以这里需要两个队列,一个队列存放正在执行的异步请求,一个存放准备继续的异步请求。
在for循环中会对readyAsyncCalls队列进行遍历,取出里面的请求添加到runningAsyncCalls队列中,直到填满runningAsyncCalls队列。
每当有网络请求Call时,dispatcher会把这个请求推送到readyAsyncCalls队列中,而okhttp相比其他网络请求框架的高效之处就在于它内部维护了一个线程池,来高效地执行网络请求。我们来看下dispatcher源码。
1. dispatcher维护的三个队列
(1)runningAsyncCalls队列
这是正在执行的异步请求队列。从注释来看,它包含了已经取消但没有执行完成的异步请求。
(2)readyAsyncCalls队列
这是就绪状态的异步请求队列。当异步请求不满足某些条件时,就会进入到该队列来进行缓存,如果条件再满足后,就会把这个队列里的请求放到runningAsyncCalls队列。
(3)runningSyncCalls队列
这是正在执行的同步请求队列。
我们来思考一下,同步请求只维护了一个队列,异步请求为什么要维护两个队列?我们这里理解为生产者和消费者模型,我们的分发器Dispatcher对应为生产者,我们的线程池ExecutorService对应为消费者池,所以这里需要两个队列,一个队列存放正在执行的异步请求,一个存放准备继续的异步请求。
2. promoteCalls()方法如何实现?
前文我们介绍了promoteCalls()方法的功能:对异步请求的两个队列进行调度,也就是将runningAsyncCalls队列中执行完的请求移除,接着把readyAsyncCalls队列中优先级最高的请求拿出来放到runningAsyncCalls队列中。我们来看下具体实现:在for循环中会对readyAsyncCalls队列进行遍历,取出里面的请求添加到runningAsyncCalls队列中,直到填满runningAsyncCalls队列。
相关文章推荐
- Android 源码解析: 图片加载库Picasso 4 任务调度 Dispatcher
- Android OkHttp 源码解析 (三) Dispatcher (核心)
- [置顶] 【Android okhttp源码解析 一】okhttp框架简单介绍
- [置顶] 【Android okhttp源码解析 二】同步请求流程和源码分析
- [置顶] 【Android okhttp源码解析 五】拦截器流程和源码解析
- [置顶] 【Android okhttp源码解析 三】异步请求流程和源码分析
- OkHttp源码解析(一) Dispatcher的调度过程分析
- OKHttp源码解析(二)线程调度Dispatcher
- Okhttp源码解析(二)——任务调度
- [置顶] Android OkHttp完全解析 是时候来了解OkHttp了
- [置顶] Android消息机制源码解析(Handler)
- Android网络编程(八)源码解析OkHttp后篇[复用连接池]
- [置顶] Android-PickerView系列之源码解析篇(二)
- 源码解析线程池调度器之任务延迟调度实现机制
- Android网络编程(四)源码解析OkHttp前篇[请求网络]
- [置顶] Android开发——View绘制过程源码解析(二)
- Android 异步任务:AsyncTask机制 源码详细版解析------从入门到升天
- Android OKHttp源码解析
- Android OKHttp 源码解析