首页 > 编程语言 >Java21的虚拟线程来了

Java21的虚拟线程来了

时间:2024-09-13 15:46:15浏览次数:1  
标签:Java21 Java 操作系统 平台 虚拟 线程 OS

1、什么是平台线程?
平台线程是作为操作系统 (OS) 线程的薄包装器实现的。平台线程在其底层 OS 线程上运行 Java 代码,并且平台线程在其整个生命周期内捕获其 OS 线程。因此,可用的平台线程数量受限于 OS 线程的数量。
平台线程通常具有较大的线程堆栈和由操作系统维护的其他资源。它们适合运行所有类型的任务,但资源可能有限。

2、什么是虚拟线程?
与平台线程类似,虚拟线程也是 java.lang.Thread。但是,虚拟线程并不与特定的操作系统线程绑定。虚拟线程仍在操作系统线程上运行代码。但是,当虚拟线程中运行的代码调用阻塞 I/O 操作时,Java 运行时会暂停虚拟线程,直到可以恢复为止。与暂停的虚拟线程关联的操作系统线程现在可以自由地执行其他虚拟线程的操作。

虚拟线程的实现方式与虚拟内存类似。为了模拟大量内存,操作系统会将较大的虚拟地址空间映射到有限的 RAM 中。同样,为了模拟大量线程,Java 运行时会将大量虚拟线程映射到少量 OS 线程中。
与平台线程不同,虚拟线程通常具有浅层调用堆栈,仅执行一次 HTTP 客户端调用或一次 JDBC 查询。尽管虚拟线程支持线程局部变量和可继承的线程局部变量,但您应谨慎考虑使用它们,因为单个 JVM 可能支持数百万个虚拟线程。
虚拟线程适合运行大部分时间处于阻塞状态(通常等待 I/O 操作完成)的任务。但它们不适合长时间运行的 CPU 密集型操作。

3、为什么要使用虚拟线程?
在高吞吐量并发应用程序中使用虚拟线程,尤其是那些包含大量并发任务且大部分时间都在等待的应用程序。服务器应用程序是高吞吐量应用程序的示例,因为它们通常处理许多执行阻塞 I/O 操作(例如获取资源)的客户端请求。
虚拟线程并不是更快的线程;它们运行代码的速度并不比平台线程快。它们存在的目的是为了提供规模(更高的吞吐量),而不是速度(更低的延迟)。

4、如何创建并运行虚拟线程?

Thread.ofVirtual();

Executors.newVirtualThreadPerTaskExecutor();

5、虚拟线程的底层原理是什么样的?

Java21虚拟线程指的是 Project Loom 中的 VirtualThreads,这是 Java 平台未来版本中的一个特性,用于提供轻量级的高度可扩展的线程。21虚拟线程是一种更高效的线程模型,它们由Project Loom 中的 Fibers 实现,旨在降低线程的创建和调度成本。
Java21的虚拟线程的工作原理如下:
(1)、用户态线程:虚拟线程是一种用户态线程,由 Java 虚拟机(JVM)直接管理而不依赖于操作系统线程。这意味着在 JVM 内部可以创建大量的虚拟线程而无需依赖于底层操作系统线程。
(2)、调度与调用堆栈:虚拟线程由协作式调度来管理,它们不需要像传统线程那样依赖于操作系统的抢占式调度。这些线程的上下文切换开销很低,因为它们使用的调用堆栈非常小,允许更高效的线程创建和调度。
(3)、Fiber 对象:在 Project Loom 中,虚拟线程通过 Fiber 对象来表示。Fiber 可以被看作是一种轻量级的执行单元,它可以像线程一样执行任务,但是比传统线程更节省资源。
(4)、用户态阻塞:虚拟线程在执行过程中遇到阻塞时,可以将自已挂起,让出 CPU,而不会占用额外的操作系统线程。这样可以避免传统线程阻塞时创建新的线程或进入等待状态,降低了系统资源消耗
(5)、利用异步IO:虚拟线程可以更好地利用异步IO操作,提高并发性能,因为它们能更轻松地处理大量的IO请求而不会阻塞线程。总的来说,虚拟线程的工作原理主要在于 JVM 内部实现了一种高效的协作式调度机制,通过Fiber 对象管理和调度大量轻量级的用户态线程,以降低线程创建、调度和管理的开销,并提高系统的并发性能。

 

标签:Java21,Java,操作系统,平台,虚拟,线程,OS
From: https://www.cnblogs.com/lhrogerluo/p/18412329

相关文章

  • 面试官:线程池遇到未处理的异常会崩溃吗?
    首先,这个问题考察的是你对线程池execute方法和submit方法的理解,在Java线程池的使用中,我们可以通过execute方法或submit方法给线程池添加任务,但如果线程池中的程序在执行时,遇到了未处理的异常会怎么呢?接下来我们一起来看。1.execute方法execute方法用于提交一个不需要......
  • 多线程篇(线程池 - 整体介绍)(持续更新迭代)
    目录一、线程池(并发编程的艺术)1.Java中的线程池1.1.线程池的实现原理1.2线程池的使用1.线程池的创建2.向线程池提交任务3.关闭线程池4.合理地配置线程池5.线程池的监控1.3本章小结2.Executor框架2.1Executor框架简介1.Executor框架的两级调度模型2.......
  • Python 虚拟环境管理
    在另外一篇文章已经讲了Python版本管理。本文主要讲Python虚拟环境管理。有了这两个方面的工具,就可以实现在Python的不同版本不同虚拟环境间方便地切换。pyenv-virtualenv一般会随pyenv一起安装,也可以通过下文方式独立安装。什么是虚拟环境一种采用协作式隔离的运......
  • 虚拟化数据恢复—异常断电导致虚拟机目录项破坏且vmdk文件又被删除的数据恢复案例
    虚拟化数据恢复环境:某品牌服务器(部署VMwareEXSI虚拟机)+同品牌存储(存放虚拟机文件)。虚拟化故障:意外断电导致服务器上某台虚拟机无法正常启动。查看虚拟机配置文件发现这台故障虚拟机除了磁盘文件以外其他配置文件全部丢失,xxx-flat.vmdk磁盘文件和xxx-000001-delta.vmdk快照文件......
  • JVM-详解Java虚拟机
    jvm概述Java上层技术与jvm的层次关系图Java生态圈Java不是最厉害的语音,但jvm是最强大的虚拟机jvm的位置Java代码执行流程对上图举例jvm的生命周期Sun(被Oracle收购)的HotSpot:第一商用虚拟机JRockit:第二商用IBM的J9:第三特定硬件环境中的虚拟机(即应用场......
  • 一个Android App最少有几个线程?实现多线程的方式有哪些?
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点多线程编程是Android应用开发中非常重要的一个环节,可以有效地提升应用的性能和用户体验。下面是对Android中多线程相关内容的详细介绍,包括app最少有几个线程。1.基本概念主线......
  • 云服务器是虚拟技术吗
    云服务器是现代信息技术领域的一个重要组成部分,它利用了虚拟化技术,为用户提供了一种基于互联网的计算服务。不同于传统的物理服务器,云服务器提供了一种灵活、高效、易于扩展的基础设施服务。本文将对云服务器与虚拟化技术的关系进行科普。什么是云服务器?云服务器,又称......
  • Java线程状态及生命周期
    基础概念Java线程在运行生命周期中的指定时刻只可能处于这6种不同状态的其中一个状态,分别是:NEW:初始状态,这是线程被创建出来但没有被调用start()。RUNNABLE:运行状态,线程被调用了start()等待运行的状态。BLOCKED:阻塞状态,等待WAITING:等待状态,表示该线程需要等待其他线程做出......
  • 线程池的应用-->2
    1.自定义线程工程当需要自定义线程的名字,线程的优先级,精灵线程状态时,需要自定义线程工厂。如何自定义线程工厂自定义工厂类,实现ThreadFactory接口,重写方法newThread()在创建线程池对象时,传递上述线程工厂对象publicclassTest5{publicstaticvoidmain(Strin......
  • 线程池介绍、参数、执行过程
    线程池管理一系列线程的资源池,提供了一种限制和管理线程资源的方式线程池一般用于执行多个不相关联的耗时任务,没有多线程的情况下,任务顺序执行,使用了线程池的话可让多个不相关联的任务同时执行好处降低资源消耗:频繁的线程创建和销毁会消耗系统资源,线程池可以复用已经创建......