Java21的虚拟线程来了

news/2024/9/18 8:17:34/文章来源:https://www.cnblogs.com/lhrogerluo/p/18412329

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 对象管理和调度大量轻量级的用户态线程,以降低线程创建、调度和管理的开销,并提高系统的并发性能。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/796597.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通义灵码获得国产 AI 编码工具最高成绩丨阿里云云原生 8 月产品月报

《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供…

执行yarn命令的时候报错: error Error: certificate has expired

完整错误:原因是:SSL证书过期 执行命令关闭验证: yarn config set strict-ssl false

《抽象代数》系列之群论入门

一、重要性 1.1 领域意义 群论是数学的一个分支,主要研究代数结构中的群、环、域等。尽管它看似抽象,但在编程领域,群论有着广泛的应用和深刻的意义。算法设计与优化:群论在算法设计中发挥着重要作用。例如,在密码学中,群论被用于设计安全的加密算法,如椭圆曲线密码学,…

【转】Chrome 的无头模式升级了:推出 --headless=new

Chrome的无头模式变得更好用了!本文概要介绍了近期的工程工作,让 Headless 更接近Chrome的常规“Headful”模式,让Headless对开发者更有用。 背景 早在 2017 年,Chrome 59 便引入了所谓的无头模式,可让您在没有任何可见界面的无人值守环境中运行浏览器。从本质上讲,就是在…

Hadoop(六)生产集群搭建(三)

完全分布式运行模式 一、群起集群 1、配置workers [user@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers在文件中添加如下内容: hadoop102 hadoop103 hadoop1042、启动集群 (1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode [user@hadoop…

延迟退休!我们又可以愉快的打工了

延迟退休! 我们又可以愉快的打工了希望可以活到办理退休那天🐸本文来自博客园,作者:bigroc,转载请注明原文链接:https://www.cnblogs.com/bigroc/p/18412267blog:http://www.bigroc.cn博客园:https://www.cnblogs.com/bigroc

面试官:线程池遇到未处理的异常会崩溃吗?

首先,这个问题考察的是你对线程池 execute 方法和 submit 方法的理解,在 Java 线程池的使用中,我们可以通过 execute 方法或 submit 方法给线程池添加任务,但如果线程池中的程序在执行时,遇到了未处理的异常会怎么呢?接下来我们一起来看。 1.execute方法 execute 方法用于…

保持使用全局 HttpClient,但确保不同请求的 HttpRequestMessage 独立

保持使用全局 HttpClient,但确保不同请求的 HttpRequestMessage 独立这是推荐的最佳实践,因为 HttpClient 是设计为可重用的,你可以使用独立的 HttpRequestMessage 来确保每个请求有独立的请求头,而不影响其他请求。private static readonly HttpClient client = new HttpC…

清理C盘缓存,超简单的清理C盘缓存清理方法

清理C盘缓存是优化Windows系统性能的重要步骤,以下是一些超简单的清理C盘缓存的方法:使用磁盘清理工具 步骤: 右键点击C盘(系统盘),选择“属性”。 在C盘属性窗口中,点击“磁盘清理”按钮。 系统会分析C盘上的文件,并列出可以删除的文件类型。 勾选你想要删除的文件类型…

Pytorch安装(GPU_Windows,安装过CPU版的想再次安装GPU)

看过我之前那篇【Pytorch安装 CPU版本】的朋友应该知道,Pytorch安装步骤很复杂。但是其实弄清楚整个逻辑会简单很多,本篇为PytorchGPU安装。如果有朋友跟着我之前的帖子安装过的,想再安装一个GPU的,可以跟着我一起安装一下。我会把我遇到的坑以及经验都给大家分享一下。 Py…

STM32F103C8T6软件安装

本教程参考b站视频教程(STM32入门教程-2023版 细致讲解 中文字幕,第三集P3软件安装),将从一下几个方面进行安装: 1.安装Keil5 MDK软件 2.安装器件支持包 3.软件注册 4.安装ST-LINK驱动 5.安装USB转串口驱动 一、安装Keil5 MDK软件 找到软件的下载链接:https://jiangxieke…

基于pikachu靶场的水平越权详解

1. pikachu靶场搭建 如果你在之前已经使用过phpstudy了,参考pikachu 靶场环境搭建 如果没有,参考pikachu 靶场搭建 如果在靶场搭建中遇到一些问题,参考皮卡丘靶场搭建遇到的问题大全 2. 水平越权简介 水平越权是指攻击者通过获取与自己拥有相同权限级别的其他用户的访问权限…