首頁 >後端開發 >Golang >Go Goroutines 是真正的協程嗎?

Go Goroutines 是真正的協程嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-15 11:21:12293瀏覽

Are Go Goroutines True Coroutines?

Go Goroutine 是協程嗎?

Google I/O 2012 演講「Go Concurrency Patterns」提出了 Go 語言中的 Goroutine 是否是輕量級線程的問題,作為協程實現。

協程定義與比較

協程通常意味著不同協程之間的明確控制傳輸機制。程式設計師可以透過程式設計方式確定協程何時應暫停執行並將控制權傳遞給另一個協程。

Goroutine 實現

相較之下,Go goroutine 會在特定但最終不確定的情況下隱性放棄控制權點。例如,goroutines 在執行 I/O 操作或透過通道發送資料之前被掛起。這種方法允許程式設計師編寫有效共享狀態的順序、輕量級進程。

實作細節

goroutine 的實作類似於「狀態執行緒」函式庫,操作處於較低水平。 Go 直接與作業系統內核交互,無需依賴外部函式庫。

更新:提議的協程包

2023 年,Russ Cox 為Go 提出了一個標準協程包,提供了明確控制轉移和協作調度的框架。

其他注意

在 Go 1.14 之前,goroutine 是非搶佔式調度的,核心可以隨時掛起執行緒。從 Go 1.14 開始,goroutines 已經被(幾乎)搶佔式調度,允許對其執行進行更精細的控制。

以上是Go Goroutines 是真正的協程嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn