当前位置:首页 > 科技  > 软件

JDK19虚线程探究

来源: 责编: 时间:2023-11-01 09:19:08 462观看
导读Part 01. 平台线程 聊虚线程之前我们先说一下JDK19之前的标准线程,在JDK19中为了区分虚线程,给它起名叫平台线程。它是对具体操作系统(OS)线程的包装,每当在JVM中创建一个平台线程,在OS中就一定有一个操作系统线程与之对

gXY28资讯网——每日最新资讯28at.com

Part 01. 平台线程 

聊虚线程之前我们先说一下JDK19之前的标准线程,在JDK19中为了区分虚线程,给它起名叫平台线程。它是对具体操作系统(OS)线程的包装,每当在JVM中创建一个平台线程,在OS中就一定有一个操作系统线程与之对应,任务代码通过平台线程在底层操作系统线程上运行。由于在平台线程的整个生命周期过程中,要不停地捕获操作系统线程,也就是说平台线程要真实的绑定一个系统线程,因此应用中平台线程的数量取决于操作系统的线程数量。gXY28资讯网——每日最新资讯28at.com

图1 平台线程调用示意图1 平台线程调用示意gXY28资讯网——每日最新资讯28at.com

平台线程适用所有类型任务,无论是IO密集型还是计算密集型,但由于平台线程和操作系统线程绑定,当平台线程执行IO密集型任务时(需要大量等待),操作系统线程也要跟着等待,浪费很多时间在等待上,而且为了维系这种绑定关系,平台线程需要维护大型线程堆栈,操作系统也需要为平台线程维护其他资源,因此创建、调度平台线程成本很高。gXY28资讯网——每日最新资讯28at.com

总之一句话,平台线程好用,但很“贵”。gXY28资讯网——每日最新资讯28at.com

Part 02. 虚线程  

JDK19开始提供虚线程的预览功能,在JDK19中虚线程仍是一个java.lang.Thread实例,仍然可以使用 Thread 类和 Thread.Builder 接口创建虚拟线程,甚至在Executors上提供newVirtualThreadPerTaskExecutor方法用于创建虚拟线程,虽然创建出来的不是线程池。由此可见官方非常希望用户在JDK后续版本中使用虚线程替换平台线程。gXY28资讯网——每日最新资讯28at.com

虚线程虽然也是Thread实例,但它的创建不与OS线程绑定。它是由jvm负责创建调度,不需要维护大型堆栈,更不需要底层操作系统为其维护资源。gXY28资讯网——每日最新资讯28at.com

虽然虚线程不与OS线程绑定,但是提交给虚线程的任务代码仍然是跑在OS线程上的。当JVM调度一个虚线程开始任务时,会将它与一个平台线程绑定,平台线程称为虚线程的载体,虚线程开始执行任务,直到虚线被IO阻塞时,JVM再次调度虚线程,将它从平台线程挂起,此时空闲下来的平台线程就又可以与其他虚线程绑定,完成其它工作。gXY28资讯网——每日最新资讯28at.com

这种设计的好处有:(1) 虚线程的的创建、挂起、恢复成本很低;(2) 虚线程数量不受操作系统线程数量限制;(3) 线程切换放在虚线程那一层级,尽量减少了平台线程的切换。gXY28资讯网——每日最新资讯28at.com

图2 虚线程调用示意图2 虚线程调用示意gXY28资讯网——每日最新资讯28at.com

Part 03.  平台线程与虚线程的对比  

3.1 线程的成本测试

测试目的主要为了观察平台线程与虚线程的创建成本以及调度成本,设计测试代码如下:gXY28资讯网——每日最新资讯28at.com

图片图片gXY28资讯网——每日最新资讯28at.com

代码很简单,构建一个task(主要是为了测试创建、切换线程的成本,因此task中不添加其他逻辑),分别创建5万个虚线程和平台线程处理task。gXY28资讯网——每日最新资讯28at.com

横坐标为测试代码的时间线,绿色面积图为CPU使用率,蓝色柱状图为内存分配事件。gXY28资讯网——每日最新资讯28at.com

(虚线程跑5w个任务(虚线程跑5w个任务gXY28资讯网——每日最新资讯28at.com

(平台线程跑5w个任务)(平台线程跑5w个任务)gXY28资讯网——每日最新资讯28at.com

从上面的图表可以看出,平台线程的创建、切换对CPU、内存的消耗远高于虚线程。gXY28资讯网——每日最新资讯28at.com

3.2  吞吐量测试-IO密集型任务

吞吐量测试逻辑,测试在相同平台线程数、相同时间内哪一种线程执行的任务数量多。gXY28资讯网——每日最新资讯28at.com

JVM提供了2个参数用以控制虚线程能调度的平台线程数:gXY28资讯网——每日最新资讯28at.com

jdk.virtualThreadScheduler.parallelism 控制提供多少个平台线程用以虚线程调度。gXY28资讯网——每日最新资讯28at.com

jdk.virtualThreadScheduler.maxPoolSize 控制最多多少个平台线程用以虚线程调度。gXY28资讯网——每日最新资讯28at.com

通过设置gXY28资讯网——每日最新资讯28at.com

-Djdk.virtualThreadScheduler.parallelism=1 -Djdk.virtualThreadScheduler.maxPoolSize=1参数控制,虚线程只能创建1个平台线程。gXY28资讯网——每日最新资讯28at.com

设计测试代码一如下:gXY28资讯网——每日最新资讯28at.com

图片图片gXY28资讯网——每日最新资讯28at.com

结果如下:gXY28资讯网——每日最新资讯28at.com

图片图片gXY28资讯网——每日最新资讯28at.com

通过结果可以看出在IO密集型任务上,虚线程的吞吐量明显高于平台线程。gXY28资讯网——每日最新资讯28at.com

3.3 吞吐量测试-计算密集型任务

测试逻辑与3.2一样,只是把任务逻辑改成模拟计算密集型。gXY28资讯网——每日最新资讯28at.com

测试代码如下:gXY28资讯网——每日最新资讯28at.com

图片图片gXY28资讯网——每日最新资讯28at.com

运行结果:gXY28资讯网——每日最新资讯28at.com

图片图片gXY28资讯网——每日最新资讯28at.com

在计算密集型的任务中,平台线程与虚线程表现差不多,说明虚线程并不会比平台线程更快。gXY28资讯网——每日最新资讯28at.com

各种数据源通过Kafka接入到数据平台层,数据平台讲明细数据存入数据存储层的ClickHouse中,明细数据的存活时间可以根据业务需求设置。同时可以根据业务报表查询的不同维度,利用ClickHouse的物化视图形成预聚合数据,提高数据查询效率。由数据服务层的定时任务周期性地从ClickHouse的预聚合数据中查询业务所需的展示数据,把展示数据存入MySQL。由数据服务层的报表服务向数据展示层提供查询服务,报表服务直接查询MySQL中的结果数据,保证了查询效率和并发性。gXY28资讯网——每日最新资讯28at.com

Part 04. 总结 

(1)虚线程相对于平台线程更加轻量,由JVM创建、调度;gXY28资讯网——每日最新资讯28at.com

(2)虚线程的调度过程中需要依赖一个平台线程(挂载、卸载);gXY28资讯网——每日最新资讯28at.com

(3)虚线程在IO密集型任务中比平台线程更有优势;gXY28资讯网——每日最新资讯28at.com

(4)虚线程目的不是让系统更快,而是让系统有更高的吞吐量。gXY28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-16290-0.htmlJDK19虚线程探究

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 聊聊六边形架构,对代码的编写有很好的指导作用

下一篇: 什么是自动化测试,看完你就懂了!

标签:
  • 热门焦点
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • Redmi Buds 4开箱简评:才199还有降噪 可以无脑入

    在上个月举办的Redmi Note11T Pro系列新机发布会上,除了两款手机新品之外,Redmi还带来了两款TWS真无线蓝牙耳机产品,Redmi Buds 4和Redmi Buds 4 Pro,此前我们在Redmi Note11T
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事“起猛了,我能看得懂日语了”。“为什么日本人说话我能听懂?”“中文不像中文,日语不像日语,但是我竟然看懂了”…&hell
  • 余承东:AI大模型技术的发展将会带来下一代智能终端操作系统的智慧体验

    8月4日消息,2023年华为开发者大会(HDC.Together)今天正式开幕,华为发布HarmonyOS 4、全新升级的鸿蒙开发套件、HarmonyOS Next开发者预览版本等一系列
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
Top