使用JDK16支援的Loom虛擬執行緒的代價 – Webtide
在本系列部落格中,我們將研究OpenJDK 16早期訪問版本中現在可用的Loom虛擬執行緒新功能。詳細點選標題見原文,直接上結論:
Loom確實允許您有許多執行緒,甚至1,000,000個執行緒,但如果這些執行緒具有深堆疊,則不允許這樣做。這似乎增加了堆疊條目的總記憶體使用量,並且還付出了長時間垃圾回收的代價。這些是對虛擬執行緒的重大限制,因此它們不是銀彈,不是可以替代核心執行緒的解決方案。
Project Loom旨在極大地減少編寫、維護和觀察可充分利用可用硬體的高吞吐量併發應用程式的工作量。…問題在於,執行緒(即併發的軟體單元)無法匹配應用程式域的自然併發單元(會話,HTTP請求或單個資料庫操作)的規模。
Project Loom可以在JVM中新增廉價且快速的生成/阻塞虛擬執行緒,這是很好的。但是便宜的執行緒卻會做昂貴的事情!
擁有1,000,000個併發應用程式實體將佔用記憶體,CPU和其他資源,無論它們阻塞還是使用非同步回撥。正如Loom Structured Concurrency所建議的那樣,Loom可能需要完全不同的程式設計風格,但是我們還沒有看到任何對資源的限制,這些資源會限制虛擬執行緒的無限生成。也有跡象表明,Loom的靈活堆疊管理帶來了CPU成本。
Loom有許多主張:阻塞程式碼更容易編寫,虛擬執行緒的啟動速度非常快且阻塞成本低。但是,這些關鍵主張要麼沒有成立,要麼沒有得到證實:我們不認為虛擬執行緒能夠自然擴充套件,因為執行緒本身不是限制因素,而是由資源決定擴充套件。除非採取其他實質性的資源管理策略,否則如果建議人們“忘記執行緒池,只是產生一個新執行緒……”就是誘導人們建立一個不穩定應用程式。
相關文章
- 使用Loom建立虛擬執行緒 - davidOOM執行緒
- 使用 Jetty 12 演示 Ktor 中的虛擬執行緒支援Jetty執行緒
- 支援JDK19虛擬執行緒的web框架,之四:看原始碼,瞭解quarkus如何支援虛擬執行緒JDK執行緒Web框架原始碼
- project-loom-c5m:用Project Loom虛擬執行緒實現500萬長連線的實驗ProjectOOM執行緒
- 【unity】 Loom實現多執行緒UnityOOM執行緒
- Java 21 虛擬執行緒:使用指南(一)Java執行緒
- [Java基礎]虛擬執行緒Java執行緒
- Java21上手體驗-分代ZGC和虛擬執行緒JavaGC執行緒
- 多執行緒的代價及上下文切換執行緒
- 虛擬執行緒原理及效能分析執行緒
- Java 21 神仙特性:虛擬執行緒使用指南(一)Java執行緒
- 3 分鐘理解 Java 虛擬執行緒Java執行緒
- java 21 虛擬執行緒初體驗Java執行緒
- 執行計劃的代價估算
- 虛擬執行緒相對於Actor模型或平臺執行緒的主要優勢? - Reddit執行緒模型
- JDK21的虛擬執行緒是什麼?和平臺執行緒什麼關係?JDK執行緒
- Java 18中啟動Project Loom數百萬執行緒JavaProjectOOM執行緒
- 聊聊JDK19特性之虛擬執行緒JDK執行緒
- Java“虛擬執行緒”被提交到JEP草案Java執行緒
- [深入理解Java虛擬機器]執行緒Java虛擬機執行緒
- Project Loom的使用者模式執行緒或協程的效能是否一定很好? - DukesletterProjectOOM模式執行緒
- 模擬主執行緒等待子執行緒的過程執行緒
- Loom會造成CPU密集型執行緒的不公平排程OOM執行緒
- Java21虛擬執行緒:我的鎖去哪兒了?Java執行緒
- Java21的虛擬執行緒Virtual Thread初體驗Java執行緒thread
- Java多執行緒-執行緒池的使用Java執行緒
- Java 21 正式 GA,虛擬執行緒真的來了Java執行緒
- Java 21 新特性:虛擬執行緒(Virtual Threads)Java執行緒thread
- Java中CompletableFuture與虛擬執行緒比較Java執行緒
- Java 21 的虛擬執行緒:高效能併發應用的福音Java執行緒
- java多執行緒之執行緒的基本使用Java執行緒
- 多執行緒-執行緒組的概述和使用執行緒
- 多執行緒-執行緒池的概述和使用執行緒
- java虛擬機器的執行原理Java虛擬機
- 執行緒池的使用執行緒
- 執行緒的基本使用執行緒
- 虛擬執行緒原理及效能分析|得物技術執行緒
- Java 21 官方速覽:全面擁抱虛擬執行緒Java執行緒