Spring Boot性能提升的核武器,速度提升500%!

向量数据库大模型数据库

虚拟线程是 Java 21 引入的一个新特性,用于简化并发编程。它与传统的操作系统线程相比,具有显著的优势:

  1. 轻量级:虚拟线程由 JVM 管理,而非操作系统,因此它们的内存占用和创建成本远低于传统线程。理论上,你可以轻松创建数十万甚至更多的虚拟线程。
  2. 高并发性:虚拟线程能处理更高并发的场景,特别是 I/O 密集型的应用,适合开发高并发、响应式的应用程序。
  3. 自动管理:无需手动管理线程池,JVM 会根据负载自动调整虚拟线程的调度,简化了并发编程的复杂性。

虚拟线程的基础用法

创建虚拟线程非常简单。你可以像创建传统线程一样启动虚拟线程,但它的创建与启动更加轻量:


        
          
Thread virtualThread = Thread.ofVirtual().start(() -> {  
    System.out.println('虚拟线程正在运行');  
});  
System.out.println('主线程正在运行');  

      

虚拟线程的延迟启动:


        
          
Thread virtualThread = Thread.ofVirtual()  
    .name('虚拟线程')  
    .unstarted(() -> System.out.println('虚拟线程运行中'));  
  
virtualThread.start();  
virtualThread.join(); // 等待虚拟线程完成  

      

在Spring Boot中使用虚拟线程

在 Spring Boot 项目中使用虚拟线程需要一些简单的配置:

picture.image

  1. 确保 Java 版本为 21 或以上。
  2. pom.xml 中启用 --enable-preview,以便支持虚拟线程特性。

        
          
<plugin>  
    <groupId>org.apache.maven.plugins</groupId>  
    <artifactId>maven-compiler-plugin</artifactId>  
    <configuration>  
        <source>21</source>  
        <target>21</target>  
        <compilerArgs>  
            <arg>--enable-preview</arg>  
        </compilerArgs>  
    </configuration>  
</plugin>  

      
  1. application.properties 中启用性能监控工具:

        
          
management.endpoints.web.exposure.include=health,info,metrics  

      
  1. 在 Spring Boot 中为 Tomcat 配置虚拟线程执行器:

        
          
@Bean  
public TomcatProtocolHandlerCustomizer<?> protocolHandlerVirtualThreadExecutorCustomizer() {  
    return protocolHandler -> protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor());  
}  

      

实验:传统线程 vs 虚拟线程

  1. 创建100,000个线程并执行

传统线程:


        
          
for (int i = 0; i < 100\_000; i++) {  
    Thread thread = new Thread(() -> System.out.println(i));  
    thread.start();  
    thread.join();  
}  

      

执行耗时约 18.6 秒。

虚拟线程:


        
          
for (int i = 0; i < 100\_000; i++) {  
    Thread thread = Thread.ofVirtual().unstarted(() -> System.out.println(i));  
    thread.start();  
    thread.join();  
}  

      

执行耗时仅 3.7 秒,性能提升了近 500% 。

  1. HTTP 请求性能对比

在高并发场景下,虚拟线程的优势尤为明显。我们对比了传统线程与虚拟线程在处理 HTTP 请求时的表现。

配置 HTTP 线程执行器:


        
          
@Bean  
public TomcatProtocolHandlerCustomizer<?> protocolHandlerVirtualThreadExecutorCustomizer() {  
    return protocolHandler -> protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor());  
}  

      

请求测试:发送 1600 个 HTTP 请求,400 并发。

  1. 传统线程:
  • 请求耗时:9.659 秒
  • 每秒请求数:165.65
  • 虚拟线程:
  • 请求耗时:7.912 秒
  • 每秒请求数:202.22

虚拟线程的吞吐量大幅提升,响应时间显著缩短。

Java性能提升的其他技巧

除了虚拟线程,Java 还有一些其他的性能提升技巧,尤其适用于 Spring Boot 高并发场景:

  1. 使用并行流:对于 CPU 密集型任务,可以使用并行流(parallelStream())来利用多核 CPU,提高处理速度。

        
          
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);  
numbers.parallelStream().forEach(number -> {  
    System.out.println(number * 2);  
});  

      
  1. 异步编程与CompletableFuture:对于 I/O 密集型任务,可以使用 CompletableFuture 进行异步处理,减少线程阻塞,提高响应性能。

        
          
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {  
    // 异步执行任务  
    System.out.println('异步任务完成');  
});  
future.join();  // 等待任务完成  

      
  1. 优化数据库查询:减少数据库查询的次数,使用缓存(如 Redis)来存储频繁查询的数据,减少不必要的 I/O 操作。
  2. 内存管理优化:通过使用对象池(如 Apache Commons Pool)来管理资源,减少频繁的对象创建和销毁,提高内存使用效率。

小结

  1. 虚拟线程 是 Java 并发编程的革新,它简化了线程管理,提升了高并发场景下的性能。
  2. 使用虚拟线程,你可以轻松创建数十万甚至更多线程,而不会影响应用的性能。
  3. 在 Spring Boot 中配置虚拟线程非常简单,只需几行代码即可启用虚拟线程,带来显著的性能提升。
  4. 除了虚拟线程,其他优化技巧(如并行流、异步编程、数据库查询优化等)也能有效提升 Java 应用的性能。

通过这些技巧,Spring Boot 应用能够在高并发场景下表现出更强的性能和更低的响应延迟。

最后欢迎加入苏三的星球,你将获得:商城系统实战、秒杀系统实战、代码生成工具、系统设计、性能优化、技术选型、高频面试题、底层原理、Spring源码解读、工作经验分享、痛点问题等多个优质专栏。

还有1V1答疑、修改简历、职业规划、送书活动、技术交流。

目前星球已经更新了4500+篇优质内容,还在持续爆肝中.....

星球已经被官方推荐了3次,收到了小伙伴们的一致好评。戳我加入学习,已有1500+小伙伴加入学习。

此外,推荐一下我的技术专栏《程序员最常见的100个问题》,目前已经更新了80多篇干货文章,里面收录了很多踩坑经历,对你的职业生涯或许有些帮助,最近收到的好评挺多的。

这个专栏总结了我10年工作中,遇到过的100个非常有代表性的技术问题,非常有参考和学习价值。

Java、Spring、分布式、高并发、数据库、海量数据、线上问题什么都有。

每篇文章从发现问题、分析问题、解决问题和问题总结等多个维度,深入浅出,分享了很多技术细节,定位和排查问题思路,解决问题技巧,以及实际工作经验。

你能从中学到很多有用知识,帮你少走很多弯路。

扫描下方二维码即可订阅:

picture.image

最后说一句(求关注,别白嫖我)

如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。

求一键三连:点赞、转发、在看。

关注公众号:【苏三说技术】,在公众号中回复:面试、代码神器、开发手册、时间管理有超赞的粉丝福利,另外回复:加群,可以跟很多BAT大厂的前辈交流和学习。

picture.image

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
vivo 容器化平台架构与核心能力建设实践
为了实现规模化降本提效的目标,vivo 确定了基于云原生理念构建容器化生态的目标。在容器化生态发展过程中,平台架构不断演进,并针对业务的痛点和诉求,持续完善容器化能力矩阵。本次演讲将会介绍 vivo 容器化平台及主要子系统的架构设计,并分享重点建设的容器化核心能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论