協程是一種輕量級線程,透過明確切換在同一呼叫堆疊中重複使用執行單元。其生命週期包括創建、執行、掛起、恢復和完成。建立協程使用 go 關鍵字,實戰中可用於平行計算(如計算斐波那契數列)。
Golang協程的建立與生命週期
簡介
協程是一種輕量級的線程,協程與線程類似,都是獨立的執行單元。但與執行緒不同的是,協程不需要像執行緒那樣擁有獨立的呼叫棧,而是複用協程創建函數的呼叫棧,透過顯式的將協程掛起(yield)或恢復(resume)來進行切換。
建立協程
在Go 中,使用go
關鍵字來建立協程,其語法如下:
go <协程体>
其中,<協程體>
表示協程要執行的程式碼區塊。
協程的生命週期
協程的生命週期主要分為以下幾個階段:
go
關鍵字建立。 chan <-
或 select
語句掛起。 <-chan
或 select
語句恢復。 close(chan)
。 實戰案例
以下是使用協程計算斐波那契數列的範例:
package main import "fmt" func main() { // 创建一个协程计算斐波那契数列 go func() { first, second := 0, 1 for i := 0; i < 10; i++ { fmt.Println(first) temp := first first = second second = temp + second } }() // 主协程等待其他协程执行完成 <-make(chan bool) }
在這個範例中,我們建立一個goroutine 來計算斐波那契數列。主協程使用 make(chan bool)
建立一個無緩衝通道,並等待該通道被關閉。當 goroutine 完成計算時,它會關閉通道,從而通知主協程結束。
以上是Golang協程的創建與生命週期的詳細內容。更多資訊請關注PHP中文網其他相關文章!