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=分享
[2]http://openjdk.java.net/jeps/373
總結
以上是生活随笔為你收集整理的JAVA16版本.JDK16关于TCP和UDP的优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA16版本.JDK16即将发布,你
- 下一篇: JDK/Java 16 可能带来什么新特