网站首页 > 开源技术 正文
一、前言
本文基于okhttp的3.11.0版本中http2讲解线程模型
二、线程模型
2.1 异步请求
- 如上当业务线程向okhttpclient投递一个任务请求后,client会先看当前激活任务个数是否到达最大值并且当前域名下的激活请求是否大于单个域名设置的最大并发数,如果大于则把任务提交到预备队列readyAsyncCalls(其是无界队列)中然后请求返回,否则把任务添加到激活队列runningAsyncCalls(其是无界队列)中,然后投递任务到线程池中执行。
- 线程池中线程会执行提交的任务,也就是具体发起http请求,这里http2使用了多路复用方式,每个http2Connection链接可以开启多个stream公用一个连接来发送请求,其内部会维护所有streamid与对应的stream对象映射。线程池线程发起http请求后会被阻塞等待结果返回。每个http2Connection里会开启一个ReaderRunnable线程,用来轮询该http2Connection中每个stream中的响应结果(类似NIO中selector线程作用),然后激活阻塞的线程。
- 当请求结果回来后会从runningAsyncCalls中移除当前任务,并且会把readyAsyncCalls中的任务移动到runningAsyncCalls中,并且投递到线程池。
2.2 同步请求
- 同步不经过线程池,直接挂起当前调用线程。
三、总结
本文总结了okhttp中http2协议时候的线程模型,欢迎讨论。
猜你喜欢
- 2024-09-28 我放弃了okhttp、httpClient,选了这个神仙工具
- 2024-09-28 很懵圈,记录一次MinIO 使用okhttp版本的问题?
- 2024-09-28 android学习,OkHttp,拦截器(okhttp自定义拦截器放在哪一层)
- 2024-09-28 Okhttp上传图片失败,居然是服务端的锅?(一)
- 2024-09-28 工作日报 2021.10.20 OkHttp3错误异常:unexpected end of stream
- 2024-09-28 深入浅出 OkHttp 源码解析及应用实践
- 2024-09-28 用OkHttp实现WebSocket长连接(利用输入实现预期结果的相互关联或者相作用的一组活动 描述的是)
- 2024-09-28 干货-okHttp的优点-收藏了(水瓶座女的缺点和优点)
- 2024-09-28 软件更新丨OkHttp 4.0.0 RC 3 发布,从 Java 切换到 Kotlin
- 2024-09-28 开发者必备的Android开发资源之OkHttp
你 发表评论:
欢迎- 03-19基于layui+springcloud的企业级微服务框架
- 03-19开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方组件
- 03-19SpringMVC +Spring +Mybatis + Layui通用后台管理系统OneManageV2.1
- 03-19SpringBoot+LayUI后台管理系统开发脚手架
- 03-19layui下拉菜单form.render局部刷新方法亲测有效
- 03-19Layui 遇到的坑(记录贴)(layui chm)
- 03-19基于ASP.NET MVC + Layui的通用后台开发框架
- 03-19LayUi自定义模块的定义与使用(layui自定义表格)
- 最近发表
-
- 基于layui+springcloud的企业级微服务框架
- 开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方组件
- SpringMVC +Spring +Mybatis + Layui通用后台管理系统OneManageV2.1
- SpringBoot+LayUI后台管理系统开发脚手架
- layui下拉菜单form.render局部刷新方法亲测有效
- Layui 遇到的坑(记录贴)(layui chm)
- 基于ASP.NET MVC + Layui的通用后台开发框架
- LayUi自定义模块的定义与使用(layui自定义表格)
- Layui 2.9.11正式发布(layui2.6)
- Layui 2.9.13正式发布(layui2.6)
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)