OkHttp3源码详解(六)Okhttp任务队列工作原理

  • 时间:
  • 浏览:0
  • 来源:大发彩神UU快三_大发神彩UU快三官方

1.1 引言

追溯下AsyncCall 守护进程的执行土最好的办法

了解源码或使用过okhttp的都知道。 okttp的操作元是Call对象。异步的实现是RealCall.AsyncCall。而 AsyncCall是实现的有另兩个 Runnable接口。

为了完成调度和复用,定义了有另兩个 队列分别用作停留队列和执行任务的队列。这有另兩个 队列完会 Dispatcher 成员变量。Dispatcher是有另兩个 控制执行,控制所有Call的挂接和任务的调度、通信、清理等操作。这里只介绍异步调度任务。

以上完成了守护进程守护进程池的复用和守护进程的管理工作。

2.2 过程分析

在这里call在runningAsyncCalls队列中被移除了,重新计算了目前正在执行的守护进程数量。但会 调用了promoteCalls() 看来是来调整任务队列的,跟进去看下

1.2 守护进程池ThreadPoolExecutor

如果我我觉得这里对readyAsyncCalls 进行调度的。最终会在readyAsyncCalls 中通过remove操作把元素迭代取出并移除如果加入到runningAsyncCalls的执行队列中执行操作。ArrayDeque 是非守护进程安全的什么都有 finished在调用promoteCalls 的如果完会 synchronized块中执行的。执行停留队列守护进程当然的前提是runningAsyncCalls 守护进程数不出 超上线,但会 停留队列里边有停留的任务。

android完成非阻塞式的异步请求的如果完会 通过启动子守护进程的土最好的办法来解决,子守护进程执行完任务的如果通过handler的土最好的办法来和主守护进程来完成通信。无限制的创建守护进程,会给系统带来小量的开销。但会 在高并发的任务下,启用个守护进程池,都可不能不能 不断的复用里边不再使用和有效的管理守护进程的调度和数量的管理。就都可不能不能 节省系统的成本,有效的提高执行波特率。

在《okhttp连接池复用机制》文章中大家在缓存Connection连接的如果也是使用的Deque双端队列。这里同样的土最好的办法,都可不能不能 方便在队列头再加元素,移除尾部的元素。

什么都有 Call本质就是有另兩个 Runable守护进程操作元肯定是装进去去excutorService中直接启动的。

小结,Call在执行任务通过Dispatcher把单元任务优先推到执行队列里进行操作,但会 操作完成再执行停留队列的任务。

2.1 图解

土最好的办法中满足执行队列里边匮乏最大守护进程数maxRequests但会 Call对应的host数目不超过maxRequestsPerHost 的如果直接把call对象直接推入到执行队列里,并启动守护进程任务(Call本质是有另兩个 Runnable)。但会 ,当前守护进程数不出 来越多,就把他推入到停留队列中。Call执行完肯定前要在runningAsyncCalls 队列中移除你这些守护进程。不出 readyAsyncCalls队列中的守护进程在有哪些如果才会被执行呢。

1 概述

2 守护进程池的复用和管理

Call代用equeue土最好的办法的如果

1.2 Call对象

okhttp的守护进程池对象处在于Dispatcher类中。实例过程如下

这里做了核心request的动作,并把失败和回复数据的结果通过responseCallback 回调到Dispatcher。执行操作完毕了如果不管与非 异常完会 进入到dispactcherfinished土最好的办法。

原文链接:https://www.bbsmax.com/A/VGzlBLg85b/