用Java 19實現類似Go併發 - mccue

banq發表於2022-05-04

執行緒通常很昂貴:
作業系統沒有辦法準確知道一個執行緒需要多少堆疊空間,所以它分配的數量大約是一兆位元組。

解決這個問題的方法是實現一種機制,即利用有限數量的作業系統執行緒,並在其之上處理大量的 "邏輯執行緒"。

對於大多數語言來說,這意味著新增某種形式的async/await語法:
你在程式碼裡放一個await,語言就知道它可以切換到處理另一個任務。
你只能在標記為async的程式碼中放置await。
這會帶來其他問題。

Go程式語言與大多數語言不同,它是以 "非合作 "的方式實現這種雜耍的。
你不用明確地用async和await標記你的程式碼,執行時為你自動切分。
他們把這些廉價的執行緒稱為 "goroutines"。

Java虛擬機器將獲得一個類似的功能,叫做 "虛擬執行緒"。
這不僅僅有利於Java,還有利於JVM上的每一種語言,包括Clojure、Groovy、Kotlin和Scala。

虛擬執行緒預計將於2022年9月20日作為 "預覽 "功能出現在Java 19中。這意味著底層功能的實現已經完成並經過了測試,但公共API會有一些突破性的變化,必須明確選擇進入。

Go中許多圍繞併發性的模式都來自於你可以隨意建立執行緒的設想。
由於Java即將加入這個俱樂部,現在似乎是一個很好的時機,可以透過Go的一些併發性例子,看看它們翻譯過來會是什麼樣子。

如果你想跟著學,你可以在這裡here得到一個早期訪問構建。解壓縮檔案並將bin/目錄新增到你的路徑中。

詳細點選標題

相關文章