天天资讯:性能提升 200% !SpringBoot 虚拟线程来了
在以往的项目中,我们面临了这样一种情况:我们收到了数千个认证请求。为了确保安全性,我们依靠第三方系统发送短信 OTP 进行验证。然而,有时候第三方系统花费的时间比预期的要长,导致延迟。我们采用了每个请求一个线程的模型,这意味着许多线程处于等待状态,并且新请求都在队列中。我们试图通过微调线程数量来优化性能,但当时我们希望有虚拟线程功能。当时 Java 中没有虚拟线程的概念,这就是 Project Loom 的作用。
(资料图片)
什么是 Project Loom?什么是 Project Loom?这是 Oracle 的一个新项目,主要目标是显著减少编写、维护和观察高吞吐量并发应用程序的工作量。换句话说,Project Loom 旨在支持和推进一个高吞吐量、轻量级的 Java 并发模型,因为传统的操作系统线程(Java 并发模型的核心)有一些缺点,并且在计算上相当昂贵。反之,虚拟线程是更轻量级的线程,不与操作系统线程连接(由 JVM 管理)。这意味着虚拟线程是“每请求对应一个线程”编程的理想选择,可以创建大量的虚拟线程,而不会降低吞吐量。开发人员可以使用现有的 JDK 工具和技术快速排除故障、调试和分析并发应用程序,在发布的 Spring Boot 3.1 中可用。作为 Spring 开发者,了解虚拟线程的概念并理解它们在开发过程中的重要性非常关键。
如何使用虚拟线程Java 版本选择Java 19 中引入的虚拟线程非常易于使用,笔者使用的 Mac M1 系列,这里选择 Azul Zulu 发行版 20.30.11 版本[1]
创建测试项目使用 Spring Initializer 或 IDE 创建项目。添加 spring-web 依赖项并添加元数据。(注意版本选择 SpringBoot 3.1 ,Java 20)
开启虚拟线程功能默认情况下, Java19 的虚拟线程功能是禁用状态的,需要通过相关 maven 编译配置开启。
通过配置 bean 启用虚拟线程org.springframework.boot spring-boot-maven-plugin org.apache.maven.plugins maven-compiler-plugin --enable-preview
@Bean TomcatProtocolHandlerCustomizer>threadExecutorCustomizer() { return protocolHandler ->protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor()); }
这个 Bean 是一个自定义的 Tomcat 协议处理器,负责处理 Spring Boot 应用程序中传入的请求。这个自定义程序的目的是配置协议处理器使用的执行器。
在 threadExecutorCustomizer 方法内部,使用 Lambda 表达式来自定义协议处理器。protocolHandler 参数代表正在自定义的 Tomcat 协议处理器的实例。
在 Lambda 表达式中,调用 protocolHandler 对象的 setExecutor() 方法,用于为协议处理器设置执行器。执行器负责执行任务,例如处理传入的请求。
在这种情况下,使用 Executors.newVirtualThreadPerTaskExecutor() 方法创建一个新的使用虚拟线程的执行器。虚拟线程是轻量级线程,可以在单个操作系统线程中并发执行任务。这意味着可以同时执行多个任务,提高性能和资源利用率。
增加测试端点@Slf4j@RequestMapping@RestControllerpublic class DemoController { @GetMapping("/") public String demo() { try { TimeUnit.MILLISECONDS.sleep(300); } catch (InterruptedException e) { log.error(e.getMessage()); } return "Current Thread Name: " + Thread.currentThread(); }}上手使用
我们可以通过 Thread.currentThread() API 获取当前请求线程的元信息,以判断虚拟线程是否已经正确开启。
性能测试对比100 线程测试不开启虚拟线程开启虚拟线程300 线程测试不开启虚拟线程开启虚拟线程500 线程测试不开启虚拟线程开启虚拟线程图表输出总结通过以上我们发现,在处理阻塞操作时,虚拟线程特别有益。随着并发请求数量的增加,虚拟线程的性能提升越来越明显。上述测试都是在未对 Spring Boot 项目进行调优和优化的情况下进行的。
参考资料[1]Azul Zulu 发行版 20.30.11 版本: https://www.azul.com/downloads/?version=java-20-sts&os=macos&architecture=arm-64-bit&package=jdk#zulu
关键词:
相关阅读
-
天天资讯:性能提升 200% !SpringBoo...
在以往的项目中,我们面临了这样一种情况:我们收到了数千个认证请求。 -
石器时代到青铜时代到铁器时代(朝鲜青...
想必现在有很多小伙伴对于朝鲜青铜时代和早期铁器时代考古方面的知识都 -
41.1℃!北京高温创历史第二高值
北京市气象局22日傍晚发布称,当日,北京南郊观象台气温飙升至41 1℃, -
当前关注:这位伟大人物的精神,总书记...
来源:新华网【学习进行时】屈原,是一位伟大的爱国诗人。习近平总书记 -
天天微速讯:法媒:洪都拉斯监狱火并41...
来源:参考消息网参考消息网6月22日报道据法新社6月20日报道,据洪都拉 -
【世界快播报】与宋PLUS同级 2024款AIO...
埃安走红,一个重要原因是产品力设计得更接地气,而且,价格很香,让消 -
速讯:vivo X90s「青漾」配色清凉驾到...
今日夏至,vivoX90s青漾配色正式亮相。淡淡的青绿色给夏日带来一丝清爽 -
智己LS7 Urban Fit首秀2023粤港澳大湾区车展
智己汽车携首款真正意义上的智能化软件整车产品“全程AI舱”,登陆2... -
世界快消息!东风日产再创业:跻身合资...
汽车产业是一场没有尽头的马拉松。一旦踏上征程,就只能义无反顾地往前 -
粽香迎端午 新华幼儿园萌娃开展品味端...
粽香迎端午新华幼儿园萌娃开展品味端午习俗活动---粽香迎端午新华幼儿 -
游览智慧公园是啥体验?
来源:人民日报海外版浙江省宁波市按照共同富裕先行市建设目标,在城市 -
电子商务行业市场消费需求分析 电子商...
近几年,以阿里巴巴、京东商城、苏宁易购等为代表的电子商务企业发展迅 -
美股三大指数涨跌不一 大型科技股多数...
美东时间周四,美股三大指数收盘涨跌不一,截止收盘,道指跌0 01%,纳 -
新华时评:生命重于泰山,筑牢安全防线-...
新华时评:生命重于泰山,筑牢安全防线---题生命重于泰山,筑牢安全防 -
征信上的账户数过多怎么办|精彩看点
当征信上的账户数量太多时,用户可以选择提前还贷,结清一部分贷款,减 -
彭清林:杭州的粽子和家乡一样甜|播报
(彭清林在医院过端午节。他说,杭州的粽子和家乡一样甜。龚柏威摄) -
最新资讯:约翰逊还能以退为进吗
原标题:约翰逊还能以退为进吗毕振山当地时间6月19日,英国前首相约翰 -
厨房风水的十大禁忌
厨房风水的十大禁忌,灶台,风水,阳台,厕所,禁忌,厨房门 -
女性官员比例低、就业状况不理想……日...
据日本头条网报道,世界经济论坛(WEF)21日发布了体现世界各国男 -
天天热消息:影驰PCIe 5.0 SSD升级提...
影驰PCIe5 0SSD升级提速近40%!最高可达12 4GB s