日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

JDK21 發(fā)布已經(jīng)過(guò)去1個(gè)月時(shí)間了,除了每次發(fā)版必然更新的GC機(jī)制,和一些增強(qiáng)功能外,還引入了一個(gè)全新的概念——虛擬線程。

什么是虛擬線程

先來(lái)看一下官方對(duì)虛擬線程(Visual Threads)的描述(已翻譯):

如今,JDK中JAVA.lang.Thread的每個(gè)實(shí)例都是一個(gè)平臺(tái)線程。平臺(tái)線程在底層操作系統(tǒng)線程上運(yùn)行Java代碼,并在代碼的整個(gè)生命周期中捕獲操作系統(tǒng)線程。平臺(tái)線程的數(shù)量限制為操作系統(tǒng)線程的數(shù)量。

虛擬線程是java.lang.thread的一個(gè)實(shí)例,它在底層操作系統(tǒng)線程上運(yùn)行java代碼,但在代碼的整個(gè)生命周期內(nèi)不會(huì)捕獲該操作系統(tǒng)線程。這意味著許多虛擬線程可以在同一個(gè)操作系統(tǒng)線程上運(yùn)行Java代碼,從而有效地共享代碼。

雖然平臺(tái)線程獨(dú)占了寶貴的操作系統(tǒng)線程,但虛擬線程卻沒(méi)有。虛擬線程的數(shù)量可以比操作系統(tǒng)線程的數(shù)量大得多。

虛擬線程是JDK而不是OS提供的線程的輕量級(jí)實(shí)現(xiàn)。它們是用戶模式線程的一種形式,在其他多線程語(yǔ)言中也很成功(例如Go中的goroutines和Erlang中的processes)。用戶模式線程甚至在早期版本的Java中被稱為“綠色線程”,當(dāng)時(shí)操作系統(tǒng)線程還不成熟和廣泛使用。然而,Java的綠色線程都共享一個(gè)操作系統(tǒng)線程(M:1調(diào)度),并且最終被平臺(tái)線程所超越,后者被實(shí)現(xiàn)為操作系統(tǒng)線程的包裝器(1:1調(diào)度)。虛擬線程采用M:N調(diào)度,其中大量(M)虛擬線程被調(diào)度在少量(N)OS線程上運(yùn)行。

簡(jiǎn)而言之,現(xiàn)在我們可以輕松地創(chuàng)建一個(gè)輕量級(jí)的虛擬線程,實(shí)現(xiàn)簡(jiǎn)單性,同時(shí)充分發(fā)揮硬件性能。

可以概括為: 輕量、多路復(fù)用、開(kāi)銷極小、異步編程、可移植性

測(cè)試

開(kāi)始一個(gè)簡(jiǎn)單的測(cè)試:1萬(wàn)并發(fā)阻塞1秒模仿web連接池,使用Thread.sleep(1) 模擬IO操作需要的時(shí)間。

public static void mAIn(String[] args) throws InterruptedException {
    long l = System.currentTimeMillis();
//    normal();
    virtual();
    System.out.println(System.currentTimeMillis() - l);
}

先使用常規(guī)線程池方式運(yùn)行:

public static void normal() throws InterruptedException {
    ExecutorService executor = Executors.newFixedThreadPool(200);
    for (int i=0; i < 10000; i++) {
        executor.execute(() -> {
            try {
                System.out.println("normal");
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
    }
    executor.shutdown();
    executor.awaitTermination(100, java.util.concurrent.TimeUnit.SECONDS);
}

得到如下結(jié)果:

JDK21 性能提升 20 倍圖片

使用 JDK21 虛擬線程池運(yùn)行:

public static void virtual() throws InterruptedException {
    ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();
    for (int i=0; i < 10000; i++) {
        executor.execute(() -> {
            try {
                System.out.println("jdk21");
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
    }
    executor.shutdown();
    executor.awaitTermination(100, java.util.concurrent.TimeUnit.SECONDS);
}

得到如下結(jié)果:

JDK21 性能提升 20 倍圖片

20多倍的提速!!!

我不理解,但我大受震撼!!!

如果有朋友想自己測(cè)試一下虛擬線程,或者JDK21的其他新特性,可以嘗試一下哦~

JDK21 官網(wǎng)下載鏈接:https://download.oracle.com/graalvm/21/latest/graalvm-jdk-21_windows-x64_bin.zip

目前虛擬線程還屬于預(yù)覽版本,沒(méi)有正式啟用。如果是IDEA 開(kāi)發(fā)工具,在啟動(dòng)的時(shí)候,需要配置VM參數(shù) --enable-preview

JDK21 性能提升 20 倍圖片

小結(jié)

經(jīng)過(guò)測(cè)試,在該例子中,Executors.newFixedThreadPool( size ); size的值越大,普通的線程池用時(shí)越短,在線程池的大小開(kāi)放到 10000后,用時(shí)幾乎一樣。

應(yīng)該是本例的IO操作是Thread.sleep的緣故,所以不會(huì)占用CPU資源。

傳統(tǒng)的線程池,一般我們會(huì)指定核心線程數(shù)量為 CPU核心數(shù)*4,最大線程數(shù)為 CPU核心數(shù)*8,而在虛擬線程池中,不需要指定線程數(shù),JDK會(huì)自動(dòng)根據(jù)資源占用情況,創(chuàng)建合適數(shù)量的線程,追求更高的吞吐量。

聽(tīng)說(shuō)springboot3.2.0版本開(kāi)始,springboot要把webflux底層也改成虛擬線程了,不知道以后會(huì)不會(huì)把所有的關(guān)于異步線程的地方都改成虛擬線程。

了不起是覺(jué)得這個(gè)虛擬線程真是個(gè)好東西,簡(jiǎn)單易用,再也不糾結(jié)怎么配置線程池,根據(jù)硬件自適應(yīng),效率極高。

現(xiàn)在Spring6是基于JDK17的,不知道下個(gè)大版本更新會(huì)不會(huì)直接更新到有虛擬線程穩(wěn)定發(fā)布的JDK版本,期待!

分享到:
標(biāo)簽:JDK
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定