天天看點

JAVA16版本.JDK16關于TCP和UDP的優化

性能加倍:虛拟線程(光纖)和JDK15/16!

如果您使用UDP作為傳輸,并希望将性能提高一倍:請繼續閱讀!

如果使用TCP,性能不會有太大變化。您可能仍然對最近的jdk和虛拟線程(以前稱為“fibers”)将帶來什麼感興趣。

虛拟線程

虛拟線程是輕量級線程,在概念上類似于舊的綠色線程,由JVM而不是核心來管理。許多虛拟線程可以映射到同一個作業系統本機(營運商)線程(當然,一次隻能映射一個),是以我們可以擁有數百萬個虛拟線程。

虛拟線程是用continuations實作的,但這隻是一個細節。重要的是JDK中的所有阻塞調用(停車場鎖支架()等)已修改為屈服而不是阻塞。這意味着我們不會浪費寶貴的本機載波線程,而隻是進入非運作狀态。當塊結束時,線程被簡單地再次标記為可運作,排程程式在它停止的地方繼續繼續執行。

主要優點:

阻塞呼叫不需要更改,例如變為被動呼叫

不需要線程池:隻需建立一個虛拟線程

更少的上下文切換(減少/消除阻塞調用)

我們可以有很多虛拟線程

虛拟線程在JDK中出現還需要一段時間,但JGroups已經添加了對它的支援:隻需在傳輸中設定use_fibers=“true”。如果JVM支援虛拟線程,那麼将使用它們,否則我們将傳回到正常的本機線程。

UDP:網絡改進

雖然虛拟線程為jgroup帶來了優勢,但通過嘗試更新的JDK,可以獲得其他性能提升。

從jdk15開始,DatagramSockets和MulticastSockets的實作已經改為委托給DatagramChannels和multicast channels。此外,還支援虛拟線程。

這提高了UDP使用DatagramChannels和multicast channels的性能。

網絡代碼改進和虛拟線程的結合為UDP帶來了驚人的結果,如下所示。

性能

用于以太網測試(1-16個)和1-5個虛拟機的JDEAK(16個)和1個。前兩個使用本機線程,後一個使用虛拟線程。

從[1]中可以看出,UDP的性能從jdk11上的44’691提高到jdk16-ea5上的81’402;這是驚人的82%的增長!啟用虛拟線程可以将16-ea5和16織機+2-14之間的性能提高到88’252,這又是8%!

jdk11和16織機的性能差異是97%!

TCP的性能差别很小;我想是因為TCP代碼已經在jdk11中進行了優化。

在jdk16loom+2-14上運作表明UDP的性能已經與TCP不相上下,事實上UDP甚至比TCP快3%!

如果您想自己嘗試一下:轉到JGroups Github repo并建立JAR(antjar)。或者稍等一下:我很快就會釋出5.0.0.Final,其中包含了這些更改。

不确定是否要将更改後傳到4.x分支。。。

享受吧!

[1]https://drive.google.com/file/d/1Ars1LOM7cEf6AWpPwZHeIfu kKLa9gv0/view?usp=分享

繼續閱讀