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

JDK19推出新特性虚拟线程是什么?

来源: 责编: 时间:2024-01-23 08:43:34 316观看
导读JDK19推出了几个新的特性,其中最具有特点的有以下几个。图片记录模式(预览版):使用记录模式增强Java编程语言以解构记录值,可以嵌套记录模式和类型模式,实现强大的、声明性的和可组合的数据导航和处理形式。这是一个预览语

JDK19推出了几个新的特性,其中最具有特点的有以下几个。H3Q28资讯网——每日最新资讯28at.com

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

  1. 记录模式(预览版):使用记录模式增强Java编程语言以解构记录值,可以嵌套记录模式和类型模式,实现强大的、声明性的和可组合的数据导航和处理形式。这是一个预览语言功能。
  2. Linux/RISC-V移植:将JDK移植到Linux/RISC-V,目前仅支持RISC-V的RV64GV配置(包含向量指令的通用64位ISA)。将来可能会考虑支持其他RISC-V配置,例如通用32位配置(RV32G)。
  3. 外部函数和内存API(预览版):引入一个API,Java程序可以通过该API与Java运行时之外的代码和数据进行互操作。这是一个预览版API。
  4. 虚拟线程(预览版):将虚拟线程引入Java平台。虚拟线程是轻量级线程,可显著地减少编写、维护和观察高吞吐量并发应用程序的工作量。
  5. 结构化并发(培养阶段):旨在通过结构化并发API简化多线程编程。这种并发性将在不同线程中运行的多个任务视为单个工作单元,以简化错误处理和取消,提高了可靠性和可观察性。这个特性来自Project Loom,它引入了一个新的轻量级并发模型。

我们看到其中有一个比较值得关注的那就是新增了虚拟线程。到底什么是虚拟线程,和我们现在使用的线程有啥区别呢?H3Q28资讯网——每日最新资讯28at.com

线程的实现方式

在操作系统中,线程是比进程更轻量级的调度执行单位,线程的引入可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源,又可以独立调度。H3Q28资讯网——每日最新资讯28at.com

线程的实现方式主要有三种:分别是使用内核线程实现、使用用户线程实现以及使用用户线程加轻量级进程混合实现。H3Q28资讯网——每日最新资讯28at.com

「使用内核线程实现」:内核线程(Kernel-Level Thread,KLT)直接由操作系统内核支持,由内核完成线程切换,内核通过操纵调度器对线程进行调度,并负责将线程的任务映射到各个处理器上,同时向应用程序提供API接口来管理线程。应用程序一般不直接使用内核线程,而是使用内核线程的一种高级接口——轻量级进程(Light Weight Process,LWP)。H3Q28资讯网——每日最新资讯28at.com

应用程序一般不会直接去使用内核线程,而是去使用内核线程的一种高级接口——轻量级进程(Light Weight Process,LWP),轻量级进程就是我们通常意义上所讲的线程,由于每个轻量级进程都由一个内核线程支持,因此只有先支持内核线程,才能有轻量级进程。H3Q28资讯网——每日最新资讯28at.com

有了内核线程的支持,每个轻量级进程都成为一个独立的调度单元,即使有一个轻量级进程在系统调用中阻塞了,也不会影响整个进程继续工作。H3Q28资讯网——每日最新资讯28at.com

但是轻量级进程具有它的局限性:首先,由于是基于内核线程实现的,所以各种线程操作,如创建、析构及同步,都需要进行系统调用。而系统调用的代价相对较高,需要在用户态(User Mode)和内核态(Kernel Mode)中来回切换。其次,每个轻量级进程都需要有一个内核线程的支持,因此轻量级进程要消耗一定的内核资源(如内核线程的栈空间),因此一个系统支持轻量级进程的数量是有限的。H3Q28资讯网——每日最新资讯28at.com

「使用用户线程实现」:在用户空间建立线程库,通过运行时系统完成线程的管理。这种实现方式下,一个进程和线程之间是一对多的关系。其优点是线程切换快,并且可以运行在任何操作系统之上,只需要实现线程库即可。H3Q28资讯网——每日最新资讯28at.com

这种实现方式下,一个进程和线程之间的关系是一对多的。H3Q28资讯网——每日最新资讯28at.com

这种线程实现方式的优点是线程切换快,并且可以运行在任何操作系统之上,只需要实现线程库就行了。但是缺点也比较明显,就是所有线程的操作都需要用户程序自己处理,并且因为大多数系统调用都是阻塞的,所以一旦一个进程阻塞了,那么进程中的所有线程也会被阻塞。还有就是多处理器系统中如何将线程映射到其他处理器上也是一个比较大的问题。H3Q28资讯网——每日最新资讯28at.com

「使用用户线程加轻量级进程混合实现」:这种实现方式结合了上述两种方式的优点,既具有用户线程实现方式的线程切换快的优点,也具有内核线程实现方式的操作系统支持性好的优点。H3Q28资讯网——每日最新资讯28at.com

「Java线程的实现方式」Java作为一门跨平台的编程语言,实际上他的线程的实现其实是依赖具体的操作系统的。而比较常用的windows和linux来说,都是采用内核线程的方式实现的。也就是说,当我们在JAVA代码中创建一个Thread的时候,其实是需要映射到操作系统的线程的具体实现的,因为常见的通过内核线程实现的方式在创建、调度时都需要进行内核参与,所以成本比较高,尽管JAVA中提供了线程池的方式来避免重复创建线程,但是依旧有很大的优化空间。而且这种实现方式意味着受机器资源的影响,平台线程数也是有限制的。H3Q28资讯网——每日最新资讯28at.com

虚拟线程

JDK19引入的虚拟线程,虚拟线程是轻量级线程,主要用于实现高吞吐量的并发应用程序。与传统的线程相比,虚拟线程具有更低的创建和销毁成本,可以更好地利用系统资源。H3Q28资讯网——每日最新资讯28at.com

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

虚拟线程的主要优势:H3Q28资讯网——每日最新资讯28at.com

  1. 高并发性:由于虚拟线程的创建和销毁成本低,因此可以在短时间内创建大量的虚拟线程,实现高并发处理。
  2. 资源利用率高:虚拟线程可以共享同一个进程的资源,如内存空间、文件描述符等,避免了资源的浪费,提高了系统的资源利用率。
  3. 易于管理和观察:虚拟线程是轻量级的,其创建、切换和管理都更加简单和快速。此外,由于虚拟线程共享同一个进程的资源,因此可以使用现有的工具和框架来观察和管理虚拟线程。

「虚拟线程与平台线程的区别」:H3Q28资讯网——每日最新资讯28at.com

  1. 虚拟线程是守护线程,不能通过setDaemon(false)方法将其更改为非守护线程。当所有启动的非守护进程线程都终止时,JVM将终止,这意味着JVM不会等待虚拟线程完成后才退出。
  2. 虚拟线程的优先级始终为normal,并且不能通过setPriority()方法更改。在虚拟线程上调用此方法没有效果。
  3. 虚拟线程不支持stop()、suspend()或resume()等方法。在虚拟线程上调用这些方法将抛出UnsupportedOperationException异常。
  4. 虚拟线程并不与特定的操作系统线程绑定,其与操作系统线程的映射关系比例也不是1:1,而是m:n。虚拟线程通常是由Java运行时来调度的,而不是操作系统。当在虚拟线程中运行的代码调用阻塞的I/O操作时,Java运行时会将虚拟线程挂起,直到其可以恢复为止。

「如何使用虚拟线程」:通过Thread.startVirtualThread()可以运行一个虚拟线程:H3Q28资讯网——每日最新资讯28at.com

Thread.startVirtualThread(() -> {    System.out.println("虚拟线程执行中...");});

通过Thread.Builder也可以创建虚拟线程,Thread类提供了ofPlatform()来创建一个平台线程、ofVirtual()来创建虚拟现场。H3Q28资讯网——每日最新资讯28at.com

Thread.Builder platformBuilder = Thread.ofPlatform().name("平台线程");Thread.Builder virtualBuilder = Thread.ofVirtual().name("虚拟线程");Thread t1 = platformBuilder .start(() -> {...}); Thread t2 = virtualBuilder.start(() -> {...});

线程池也支持了虚拟线程,可以通过Executors.newVirtualThreadPerTaskExecutor()来创建虚拟线程:H3Q28资讯网——每日最新资讯28at.com

try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {    IntStream.range(0, 10000).forEach(i -> {        executor.submit(() -> {            Thread.sleep(Duration.ofSeconds(1));            return i;        });    });}

其实并不建议虚拟线程和线程池一起使用,因为Java线程池的设计是为了避免创建新的操作系统线程的开销,但是创建虚拟线程的开销并不大,所以其实没必要放到线程池中。H3Q28资讯网——每日最新资讯28at.com

「性能差异」从Runnable创建10000个线程,并使用虚拟线程和平台线程执行它们,以比较两者的性能。H3Q28资讯网——每日最新资讯28at.com

final AtomicInteger atomicInteger = new AtomicInteger();Runnable runnable = () -> {  try {    Thread.sleep(Duration.ofSeconds(1));  } catch(Exception e) {      System.out.println(e);  }  System.out.println("Work Done - " + atomicInteger.incrementAndGet());};

传统线程实现:H3Q28资讯网——每日最新资讯28at.com

Instant start = Instant.now();try (var executor = Executors.newFixedThreadPool(100)) {  for(int i = 0; i < 10_000; i++) {    executor.submit(runnable);  }}Instant finish = Instant.now();long timeElapsed = Duration.between(start, finish).toMillis();  System.out.println("总耗时 : " + timeElapsed);

虚拟线程实现:H3Q28资讯网——每日最新资讯28at.com

Instant start = Instant.now();try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {  for(int i = 0; i < 10_000; i++) {    executor.submit(runnable);  }}Instant finish = Instant.now();long timeElapsed = Duration.between(start, finish).toMillis();  System.out.println("总耗时 : " + timeElapsed);

最终结果:H3Q28资讯网——每日最新资讯28at.com

总耗时 : 102323总耗时 : 1674

100秒和1.6秒的差距,虚拟线程的性能提升还是比较大的。H3Q28资讯网——每日最新资讯28at.com

Java虚拟线程相对于传统线程具有更好的性能表现,特别是在高并发场景下。但是需要注意的是,虚拟线程并不是万能的,过度使用虚拟线程也可能会导致其他问题,如线程数量过多、线程间通信和同步问题等。H3Q28资讯网——每日最新资讯28at.com


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

本文链接:http://www.28at.com/showinfo-26-66350-0.htmlJDK19推出新特性虚拟线程是什么?

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

上一篇: 微信 12 月打击处理 3555 篇不实文章,十大谣言包括“网传广州限制外卖配送”

下一篇: 查电影评分上互联网?别逗了!

标签:
  • 热门焦点
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 微软邀请 Microsoft 365 商业用户,测试视频编辑器 Clipchamp

    8 月 1 日消息,微软近日宣布即将面向 Microsoft 365 商业用户,开放 Clipchamp 应用,邀请用户通过该应用来编辑视频。微软于 2021 年收购 Clipchamp,随后开始逐步整合到 Microsof
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 三星折叠屏手机去年销售近1000万台 今年目标定为1500万

    7月29日消息,三星率先发力可折叠手机市场,在全球市场已经取得了非常亮眼的成绩,接下来会进一步巩固和扩大这一优势。三星在推出Galaxy Z Flip5和Galax
  • 滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 存在16项违法事实开始于2121年7月,历经一年时间,网络安全审查办公室对“滴滴出行”网络安全审查终于有了一个暂时的结束。据“网信
  • 英特尔Xe-HP项目终止,将专注Xe-HPC/HPG系列显卡

    据10 月 31 日消息报道,英特尔高级副总裁兼加速计算系统和图形事业部总经理 表示,Xe-HP“ Arctic Sound” 系列服务器 GPU 已经应用于 oneAPI devcloud 云服
Top