自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開(kāi)發(fā) 前端
虛擬線程由 JVM 管理,而非操作系統(tǒng),因此它們的內(nèi)存占用和創(chuàng)建成本遠(yuǎn)低于傳統(tǒng)線程。理論上,你可以輕松創(chuàng)建數(shù)十萬(wàn)甚至更多的虛擬線程。

虛擬線程是 Java 21 引入的一個(gè)新特性,用于簡(jiǎn)化并發(fā)編程。它與傳統(tǒng)的操作系統(tǒng)線程相比,具有顯著的優(yōu)勢(shì):

  1. 輕量級(jí):虛擬線程由 JVM 管理,而非操作系統(tǒng),因此它們的內(nèi)存占用和創(chuàng)建成本遠(yuǎn)低于傳統(tǒng)線程。理論上,你可以輕松創(chuàng)建數(shù)十萬(wàn)甚至更多的虛擬線程。
  2. 高并發(fā)性:虛擬線程能處理更高并發(fā)的場(chǎng)景,特別是 I/O 密集型的應(yīng)用,適合開(kāi)發(fā)高并發(fā)、響應(yīng)式的應(yīng)用程序。
  3. 自動(dòng)管理:無(wú)需手動(dòng)管理線程池,JVM 會(huì)根據(jù)負(fù)載自動(dòng)調(diào)整虛擬線程的調(diào)度,簡(jiǎn)化了并發(fā)編程的復(fù)雜性。

虛擬線程的基礎(chǔ)用法

創(chuàng)建虛擬線程非常簡(jiǎn)單。你可以像創(chuàng)建傳統(tǒng)線程一樣啟動(dòng)虛擬線程,但它的創(chuàng)建與啟動(dòng)更加輕量:

Thread virtualThread = Thread.ofVirtual().start(() -> {
    System.out.println("虛擬線程正在運(yùn)行");
});
System.out.println("主線程正在運(yùn)行");

虛擬線程的延遲啟動(dòng):

Thread virtualThread = Thread.ofVirtual()
    .name("虛擬線程")
    .unstarted(() -> System.out.println("虛擬線程運(yùn)行中"));

virtualThread.start();
virtualThread.join(); // 等待虛擬線程完成

在Spring Boot中使用虛擬線程

在 Spring Boot 項(xiàng)目中使用虛擬線程需要一些簡(jiǎn)單的配置:

圖片圖片

  • 確保 Java 版本為 21 或以上。
  • 在 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>
  • 在 application.properties 中啟用性能監(jiān)控工具:
management.endpoints.web.exposure.include=health,info,metrics
  1. 在 Spring Boot 中為 Tomcat 配置虛擬線程執(zhí)行器:
@Bean
public TomcatProtocolHandlerCustomizer<?> protocolHandlerVirtualThreadExecutorCustomizer() {
    return protocolHandler -> protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor());
}

實(shí)驗(yàn):傳統(tǒng)線程 vs 虛擬線程

1. 創(chuàng)建100,000個(gè)線程并執(zhí)行

傳統(tǒng)線程:

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

執(zhí)行耗時(shí)約 18.6 秒。

虛擬線程:

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

執(zhí)行耗時(shí)僅 3.7 秒,性能提升了近 500% 。

2. HTTP 請(qǐng)求性能對(duì)比

在高并發(fā)場(chǎng)景下,虛擬線程的優(yōu)勢(shì)尤為明顯。我們對(duì)比了傳統(tǒng)線程與虛擬線程在處理 HTTP 請(qǐng)求時(shí)的表現(xiàn)。

配置 HTTP 線程執(zhí)行器:

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

請(qǐng)求測(cè)試:發(fā)送 1600 個(gè) HTTP 請(qǐng)求,400 并發(fā)。

  1. 傳統(tǒng)線程:

請(qǐng)求耗時(shí):9.659 秒

每秒請(qǐng)求數(shù):165.65

  1. 虛擬線程:

請(qǐng)求耗時(shí):7.912 秒

每秒請(qǐng)求數(shù):202.22

虛擬線程的吞吐量大幅提升,響應(yīng)時(shí)間顯著縮短。

Java性能提升的其他技巧

除了虛擬線程,Java 還有一些其他的性能提升技巧,尤其適用于 Spring Boot 高并發(fā)場(chǎng)景:

  1. 使用并行流:對(duì)于 CPU 密集型任務(wù),可以使用并行流(parallelStream())來(lái)利用多核 CPU,提高處理速度。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.parallelStream().forEach(number -> {
    System.out.println(number * 2);
});
  1. 異步編程與CompletableFuture:對(duì)于 I/O 密集型任務(wù),可以使用 CompletableFuture 進(jìn)行異步處理,減少線程阻塞,提高響應(yīng)性能。
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
    // 異步執(zhí)行任務(wù)
    System.out.println("異步任務(wù)完成");
});
future.join();  // 等待任務(wù)完成
  1. 優(yōu)化數(shù)據(jù)庫(kù)查詢:減少數(shù)據(jù)庫(kù)查詢的次數(shù),使用緩存(如 Redis)來(lái)存儲(chǔ)頻繁查詢的數(shù)據(jù),減少不必要的 I/O 操作。
  2. 內(nèi)存管理優(yōu)化:通過(guò)使用對(duì)象池(如 Apache Commons Pool)來(lái)管理資源,減少頻繁的對(duì)象創(chuàng)建和銷毀,提高內(nèi)存使用效率。

小結(jié)

  1. 虛擬線程 是 Java 并發(fā)編程的革新,它簡(jiǎn)化了線程管理,提升了高并發(fā)場(chǎng)景下的性能。
  2. 使用虛擬線程,你可以輕松創(chuàng)建數(shù)十萬(wàn)甚至更多線程,而不會(huì)影響應(yīng)用的性能。
  3. 在 Spring Boot 中配置虛擬線程非常簡(jiǎn)單,只需幾行代碼即可啟用虛擬線程,帶來(lái)顯著的性能提升。
  4. 除了虛擬線程,其他優(yōu)化技巧(如并行流、異步編程、數(shù)據(jù)庫(kù)查詢優(yōu)化等)也能有效提升 Java 應(yīng)用的性能。

通過(guò)這些技巧,Spring Boot 應(yīng)用能夠在高并發(fā)場(chǎng)景下表現(xiàn)出更強(qiáng)的性能和更低的響應(yīng)延遲。

責(zé)任編輯:武曉燕 來(lái)源: 碼猿技術(shù)專欄
相關(guān)推薦

2024-09-12 14:44:57

2009-04-01 09:56:41

2021-06-15 13:59:52

勒索軟件攻擊數(shù)據(jù)泄露

2021-06-02 10:10:54

在線泄漏網(wǎng)絡(luò)威脅網(wǎng)絡(luò)攻擊

2024-04-29 18:55:16

緩存Spring性能

2013-05-21 09:35:58

核武器研制單位加速器

2017-02-14 10:53:55

2018-05-29 09:37:37

2016-10-12 08:34:32

2024-12-26 11:01:22

2017-08-14 17:34:27

AI馬斯克人工智能

2021-06-16 15:12:34

網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全技術(shù)周刊

2021-04-05 14:54:27

網(wǎng)絡(luò)空間網(wǎng)絡(luò)攻擊漏洞

2021-07-12 11:28:56

數(shù)據(jù)人工智能AI

2025-01-06 23:33:04

2025-03-24 07:15:00

WebWorkerWeb瀏覽器

2019-04-01 16:24:57

2016-10-17 22:52:30

2025-03-10 00:00:50

2018-01-02 09:16:27

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)