Project Loom的使用者模式執行緒或協程的效能是否一定很好? - Dukesletter

banq發表於2020-08-14

Project Loom繼續前進,並引起了討論:使用者模式執行緒如何提供比OS執行緒更好的應用程式效能?
OpenJDK的Project Loom的技術主管Ron Pressler在“ 關於使用者模式執行緒和協程的效能 ”中回答了這個問題。
本文不是技術性文章,也不涉及實施細節。Ron 使用排隊論和利特爾定律解釋說,儘管虛擬執行緒中的任務切換成本比OS執行緒中的成本低,但真正的收益在於能夠增加執行實際工作的程式數量,同時降低其成本(我們可以有更多執行緒而消耗很少的資源)。
這個想法很重要,它將幫助我們更好地理解: Project Loom是否會廢除Java Futures?
Java 15將釋出Project Loom的第一個版本,Project Loom在Reactive模型正規化中的影響:“ 對Project Loom,Reactive模型和協程 ”:
  • Reactive模型和Kotlin協程都在客戶端程式碼和JVM執行緒之間新增了一個額外的抽象層。框架/庫的職責是動態地將一個對映到另一個。問題的關鍵在於,JVM執行緒是OS執行緒的薄包裝:請記住,OS執行緒建立起來很昂貴,並且數量限制在數千個之內。
  • Project Loom的目標是實際上將JVM執行緒與OS執行緒解耦。其中一個想法是建立一個額外的抽象,稱為Fiber
  • 但是,java15並沒有引入新的Fiber類,而是重用了Java開發人員非常熟悉的一個類- java.lang.Thread!因此,在新的JVM版本中,某些Thread物件可能是重量級的並對映到OS執行緒,而另一些物件可能是虛擬執行緒。
  • Project Looms將現有的Thread實現方式從OS執行緒的對映更改為可以表示此類執行緒或虛擬執行緒的抽象。就其本身而言,這是一個有趣的舉動,它在一個平臺上歷來比創新更重視向後相容性。與其他最新的Java版本相比,此功能是真正的遊戲規則改變者。一般而言,開發人員應儘快開始熟悉它。打算學習Reactive和協程的開發人員可能應該退後延遲一步。

相關文章