【Android okhttp源码解析 四】任务调度核心类dispatcher解析

Android之OKHttp源码解析 基本的使用流程如下 二、使用流程源码分析 这里与同步请求的有些不同那异步请求流程中Dispatcher中做了什么?从上面的执行流程源码我们可以了解到在进行同步请求 时只是调用了Dispatcher的方法,将同步请求放置到同步双端队列中,这里并没有体现"分发"的作用,而在进行异步请求时,调用了Dispatcher的方法,这里接着看源码: 首先会将异步任务存储到等待队列中,其后会调用进行任务的分发,根据执行队列的请求数量最大阈值和请求相同host的数量进行一个条件判断,根据结果决定要不要把任务放置执行队 阅读详情
>okhttp源码解析系列文章: >第一篇:《okhttp框架简单介绍》 >https://blog.youkuaiyun.com/colinandroid/article/details/79774907 >第二篇:《同步请求流程和源码分析》 >https://blog.youkuaiyun.com/colinandroid/article/details/79774918 >第三篇:《异步请求流程和源码分析》 >https://blog.youkuaiyun.com/colinandroid/article/details/79774932 >第四篇:《任务调度核心类dispatcher解析》 >https://blog.youkuaiyun.com/colinandroid/article/details/79774936 >第五篇:《拦截器流程和源码解析》 >https://blog.youkuaiyun.com/colinandroid/article/details/79706161

okhttp如何实现同步异步请求,这就是由dispatcher来管理的。我们来借助一张图来理解一下dispatcher工作原理
这里写图片描述
每当有网络请求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队列。

02.OkHttp重要类说明 目录介绍 01.有哪些重要的类 02.OKHttpClient类 03.Request和Response类 04.Call接口类说明 05.RealCall类说明 06.Dispatcher类说明 07.主要流程图 01.有哪些重要的类 OKHttpClient类 Request类和Response类 Call类和RealCall类 Dispatcher类 02.OKHttpClient类... 阅读详情

相关推荐

拼多多Android面试题及参考答案

Android 系统采用分层架构设计,从底层到上层依次为Linux 内核层硬件抽象层(HAL)系统运行时库层应用框架层应用层,共五层。位置:Linux 内核层与系统运行时库层之间,是“硬件与系统的隔离层”。核心作用:屏蔽硬件差异,为上层提供统一的硬件访问接口,解决 Android 开源与硬件厂商闭源的矛盾,具体功能如下:硬件能力抽象:将硬件的具体实现(如不同厂商的摄像头芯片、音频芯片)封装为标准化接口(如Camera HALAudio HAL。

大模型大数据攻城狮的专栏 1284

Android 网络编程之OkHttp源码解析

前言:OkHttp框架是Android的网络请求框架,无数的项目都在使用着这个框架,重要性不言而喻; 本文会将OKHTTP的源码进行拆解,每个部分来单独学习,由简入深,循序渐进,篇幅较长,建议收藏,慢慢观看,如果觉得内容不错的话,点赞关注来一波,感谢! 源码基于okhttp3 java版本:3.14.9 OkHttp3的简单使用: public void request() { String url = "http://wwww.baidu.com"; OkH.

十年磨一剑 706

以高通camera 申请ion内存看dma-buf

1 fd 与ion buffer, file绑定 简单总结就是申请一个buffer,再创建一个dmabuf 结构体然后将,然后将dmabuf中得指针指向buffer,dmabuf 再传递给一个匿名的inode,获取到一个file,这样file和dmabuf绑定起来,也就和buffer关联上。然后再从进程中分配一个空闲的fd,将fd 和file囊绑定。这样就能通过fd 快速查找到buffer。file 是个全系统的,他和进程无关,但是fd 是每个进程都是自己独立的,所以再跨进程传输时只需要保证fd ...

兔兔里个花兔的博客 6444

Android OkHttp3源码详解——Dispatcher(任务调度器)

一 前言 前一篇文章我们学习了Android OkHttp3源码详解——整体框架,今天我们来看一下Dispatcher(调度器)。首先我们来看看OkHttp的Wiki对Dispatcher`(调度器)介绍。 For synchronous calls, you bring your own thread and are responsible for managing how many sim...

zhangqiluGrubby的博客 1359

ACPWorkbench_for_BP10

ADC支持9种采样率:8000Hz、11025Hz、12000Hz、16000Hz、22050Hz、24000Hz、32000Hz、44100Hz 以及 48000Hz。选择5种MCLK源时, 模块内部的MCLK源无效。I2S 采样率支持:8K,11.025K,12K,16K, 22.05K, 24K, 32K, 44.1K, 48K, 88.2K, 96K, 176.4K 和 192K。DAC采样率支持:8K,11.025K,12K,16K,22.05K, 24K, 32K, 44.1K和48K。

dddds222_的博客 4558

RANSAC地面点分割:从原理到C++实战优化

本文深入解析RANSAC算法在点云地面分割中的原理与C++实战优化,涵盖动态迭代次数、自适应阈值等关键技巧,通过并行计算和内存访问优化提升性能,适用于激光雷达点云处理。

weixin_29015051的博客 277

Android:OkHttp请求分发器 Dispatcher的理解和使用

OkHttp请求分发器 Dispatcher的理解和使用OkHttp 请求分发器 Dispatcher参考 OkHttp 请求分发器 Dispatcher 当我们调用了 RealCall 的 execute() 或 enqueue() 方法后,RealCall 会调用 Dispatcher 对应的 execute() 和 enqueue() 方法,请求分发器 Dispatcher 的 execute() 方法只是简单地把同步请求加入同步请求队列,下面我们来看下 Dipsatcher 中比较重要的 enqu

JMW1407的博客 1886

基础矩阵、本质矩阵、单应矩阵

基础矩阵是一个 3×3 的秩为2的矩阵,用于描述两个不同视图(或称为图像)之间对应点的几何约束。更具体地说,如果你有两幅图像,分别从两个不同的相机或者相机位置拍摄,那么基础矩阵可以用于找到一个图像中的点在另一个图像中的对应点。本质矩阵也是一个 3×3 的秩为2的矩阵,与基础矩阵非常类似。当两个视图(图像)之间的场景是一个平面或者两个视图之间仅有旋转和平移时,可以使用单应矩阵来关联这两个视图。这三个矩阵都是在计算机视觉中广泛应用的基础工具,但它们适用于不同类型的视图和场景。给定两个图像中的一对对应点。

Gloamirror的博客 1329

Android OkHttp源码分析

Android Okhttp 模块

lilinwang1990的博客 437

优化点列图(RMS半径)的操作数

优化点列图(RMS半径)的操作数

weixin_72050316的博客 2258

CLRNet车道线检测模型在Orin Nano Super开发板上的全栈部署与优化实践

本文详细介绍了将CLRNet车道线检测模型部署到NVIDIA Orin Nano Super开发板的全过程。内容包括:1) Orin开发板硬件规格分析;2) JetPack SDK环境配置与Python虚拟环境搭建;3) CLRNet模型架构解析与PyTorch实现;4) 模型转换与TensorRT加速优化方法。通过系统性的环境配置、模型转换和性能优化,为边缘计算场景下的车道线检测应用提供了完整的解决方案,实现了在Orin平台上的高效部署。

huanghm88的专栏 226

android xml解析框架_Android 网络框架之OkHttp源码解析

作者:Amter转载:https://juejin.im/post/6873476209737629709#heading-0前言:OkHttp框架是Android的网络请求框架,无数的项目都在使用着这个框架,重要性不言而喻;本文会将OKHTTP的源码进行拆解,每个部分来单独学习,由简入深,循序渐进,篇幅较长,建议收藏,慢慢观看,如果觉得内容不错的话,点赞关注来一波,感谢!源码基于okh...

weixin_39613824的博客 112

Android SurfaceFlinger——概述(一)

对于系统渲染流程的理解是指导 SurfaceFlinger 设计的核心思想,从 Android 4.1 一直到 Android 9.0 都没有太大的变化。只要抓住这五个核心思想,我们阅读 SurfaceFlinger 的难度就会下降不少。下面看一下 SurfaceFlinger 的体系和 Skia 以及 View的绘制流程的关系。framework 面向开发者所有的 View 是便于开发的控件,里面仅仅只是提供了当前 View 各种属性以及功能。

小旭的专栏 2584

android 闹钟源码分析_Android网络编程-OKHttp源码角度分析Http

前面介绍了网络的基础知识,这篇主要从OKHttp源码角度来分析Http。OKHttp是一个优秀的网络请求框架,有以下特点:支持HTTP2/SPDYSocket自动选择最好路线,并支持自动重连拥有自动维护的Socket连接池,减少握手次数拥有队列线程池,轻松写并发拥有Interceptors轻松处理请求与响应(比如透明GZIP压缩)实现基于Headers的缓存策略基本使用同步请求同步的Get请求异步...

weixin_33587731的博客 153

MIKE水动力笔记5_建立水动力模型

前文已经讲了如何制作网格文件(.mdf文件),这一博文就讲如何建立水动力模型。

晏长街的博客 3万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【Android okhttp源码解析 一】okhttp框架简单介绍

1. 同步请求方法 以同步get请求为例,同步请求主要分为3步: a. 创建OkHttpClient对象和Request对象 b. 将Request封装成Call对象 c. 调用Call的execute()方法发送同步请求,进入阻塞状态,直到收到响应 2. 异步请求方法 以异步get请求为例,异步请求主要分为3步: a. 创建OkHttpClient对象和Request对象 ...

你关注了我,是个概率极低的事件...... 618

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Android okhttp源码解析 二】同步请求流程和源码分析

1. 创建OkHttpClient对象 这里使用Builder模式来给OkHttpClient对象的成员变量赋值,这里最重要的两个成员变量时dispatcher和connectionPool。其中, (1)dispatcher是一个分发器类,由它决定网络请求是直接处理还是缓存等待,对于同步请求,这个分发器只是把同步请求放到队列当中。 (2)connectionPool是一个连接池...

你关注了我,是个概率极低的事件...... 467

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【Java知识】OkHttp一款优秀的http客户端工具

OkHttp是Java生态中最广泛使用的HTTP客户端库之一,在Android和后端服务中占据主导地位。其核心优势包括高性能(连接池复用、零拷贝处理)、可扩展性(拦截器机制)和安全性(TLS 1.3支持)。通过源码分析可见其设计亮点:线程安全的ConnectionPool管理、零拷贝优化和响应缓存机制。OkHttp适用于高并发服务、微服务架构和移动端开发,凭借其性能、扩展性和可靠性成为开发者的首选工具。

wendao76的专栏 1290

Android Okhttp源码解析流程

okhttp源码解析流程 仅供参考 目前Android网络开发框架已经离不开okhttp,至少我的所有项目基本上都使用的是okhttp。 所以我们需要知其然,更需要知其所以然,今天就开始进行okhttp的源码进行解析。 我使用的library的版本是3.12.1版本的 implementation 'com.squareup.okhttp3:okhttp:3.12.1' 下面是一个正常的使用 OkHttpClient client = new OkHttpClient();

qq_16899301的博客 3257

Android 网络框架之OkHttp源码解析

跳槽季整理面试题已经成了我多年的习惯!在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。

goodhighting的博客 945

android http 线程池,Okhttp的线程池

2021年第一篇文章~~线程池策略当一个任务通过execute(Runnable)方法添加到线程池时:线程数量小于corePoolSize,新建线程数来处理被添加的任务。线程数量大于等于corePoolSize,存在空闲线程,使用空闲线程执行新任务。线程数量大于等于corePoolSize,不存在空闲线程,新任务被添加到等待队列,添加成功则等待空闲线程;添加失败:线程数量小于最大线程数,新建线程执...

weixin_34378978的博客 987

Android-详解网络请求框架-OkHttp(源码)

前言 1.OkHttp的优点 网络方面 (1)它支持http2.0,在网络请求响应方面使用了多路复用; (2)内置连接池,减少连接开销,复用连接; (3)内有Response缓存,缓存响应,避免重复的请求; (4)对响应体支持gzip压缩,使得传输数据更为轻量; (5)支持SPDY,允许连接同一主机的所有请求分享一个socket; 拓展方面 (1)支持重定向,重试请求,重写编码拦截器; (2)支持头部信息拦截,自带CookieJar方法; (3)支持网络数据传输时的监听; (4)通过需求能自定义拦截器进行处

q1210249579的博客 1846

Android中okhttp原理详解

目录 1、okhttp工作的大致流程2、okhttp中的连接3、Dispatcher和线程池4、OkHttp中的设计模式5、OkHttp的优势6、参考连接1、okhttp工作的大致流程 1...

Android技术之家 2864

OkHttp(4.11.0版本)的源码解析

OkHttp 4.11.0 源码解析

不再烦恼 1917

android 协程基础(一)

android 协程基础基础概念协程挂起和恢复挂起和阻塞调度器Dispatchers.MainDispatchers.IODispatchers.Default结构化并发-CoroutineScope 背景:上家公司干了三年,开发语言主要用的JAVA和flutter来开发的,新的公司全是kotlin,所以又要把上上家公司用的kotlin要回顾下了,主要还是协程和Jetpack相关。 基础概念 协程 协程并不是一个新的概念,它并不是 Kotlin 发明的。它们已经存在了几十年,并且在 Go 等其他一些编程语言

HUandroid的博客 1507

Android源码-一文带你搞懂OkHttp,【金九银十

);OkHttp核心执行流程是怎样?

m0_60707538的博客 1178
上一篇: 【Android okhttp源码解析 三】异步请求流程和源码分析
下一篇: 你掌握了快速学习一门语言的方法了吗?看这里。。
Colin_Mindset
博客等级 码龄12年 159粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值