热门问题
时间线
聊天
视角

綠色執行緒

来自维基百科,自由的百科全书

Remove ads

電腦程式設計中,綠色執行緒是一種由執行環境虛擬機器排程,而不是由本地底層作業系統排程的執行緒。綠色執行緒並不依賴於底層的作業系統提供的支援,而是通過類比來實現執行多執行緒,這種執行緒的排程發生在使用者空間而不是核心空間,所以它們可以在沒有原生執行緒支援的環境中工作。

詞源

綠色執行緒的名稱來源於最初的Java執行緒庫。這是因為甲骨文公司的「綠色團隊」最初設計了Java 的執行緒庫。

效能

多核處理器上,原生執行緒可以自動將工作分配給多個處理器,而綠色執行緒做不到這一點。在某些虛擬機器中,綠色執行緒可以啟動得更快。然而,在單處理器電腦上,最有效的工作方式依舊沒有定論。在一台執行著(執行時間很長的)Linux 2.2 核心的電腦上的測試表明:

  • 綠色執行緒的效能線上程啟用和同步上明顯好於原生執行緒。
  • Linux原生執行緒的效能在 I/O 操作和上下文交換 (Context Switch) 上略好於綠色執行緒。

當一個綠色執行緒執行一個阻塞的系統呼叫,不僅是當前的執行緒被阻塞,而是當前行程中的所有執行緒都會被阻塞。如果虛擬機器在實現綠色執行緒時,為每個 I/O 操作分配特定的 I/O行程(這些行程對使用者透明)可以減少使用者編程時的負責度,但是為了避免阻塞問題,綠色執行緒必須使用非同步I/O操作。

對應的,在使用原生執行緒時,也有方法可以減少執行緒啟用和同步的開銷:

  • 使用執行緒池可以通過重用有限數量的執行緒,來降低重新生成新執行緒的成本。
  • 使用虛擬機器和原生執行緒的語言可以使用Escape analysis,來避免在不需要的情況下同步代碼塊。
Remove ads

Java虛擬機器中的綠色執行緒

舊版本

在Java 1.1中,綠色執行緒(至少在 Solaris 上)是JVM 中使用的唯一一種執行緒模型。由於綠色執行緒和原生執行緒比起來在使用時有一些限制,隨後的 Java 版本中放棄了綠色執行緒,轉而使用原生執行緒。Squawk虛擬機器英語Squawk virtual machine是一個例外,它是低功耗裝置的作業系統和Java虛擬機器的混合體。它使用綠色執行緒來保持機器語言的絕對最小並支援分離的遷移。Kilim和Quasar 是在隨後的 JVM 版本中通過修改Java 編譯器產生的位元組碼來實現綠色執行緒的開源專案(Quasar 也支援 Kotlin 和 Clojure)。

Java新版的虛擬執行緒

從 Java 21 版開始,以代號 JEP 444 重新加入綠色執行緒的功能,並改名為「虛擬執行緒」[1]

其他語言的綠色執行緒

還有一些其他的程式語言也實現了可以替代原生執行緒的綠色執行緒。例如:

Remove ads

另請參閱

參考資料

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads