首頁 > 後端開發 > Golang > 主體

Golang協程的創建與生命週期

PHPz
發布: 2024-04-15 17:06:02
原創
724 人瀏覽過

協程是一種輕量級線程,透過明確切換在同一呼叫堆疊中重複使用執行單元。其生命週期包括創建、執行、掛起、恢復和完成。建立協程使用 go 關鍵字,實戰中可用於平行計算(如計算斐波那契數列)。

Golang協程的創建與生命週期

Golang協程的建立與生命週期

簡介

協程是一種輕量級的線程,協程與線程類似,都是獨立的執行單元。但與執行緒不同的是,協程不需要像執行緒那樣擁有獨立的呼叫棧,而是複用協程創建函數的呼叫棧,透過顯式的將協程掛起(yield)或恢復(resume)來進行切換。

建立協程

在Go 中,使用go 關鍵字來建立協程,其語法如下:

go <协程体>
登入後複製

其中,<協程體> 表示協程要執行的程式碼區塊。

協程的生命週期

協程的生命週期主要分為以下幾個階段:

  • 建立: 協程透過go 關鍵字建立。
  • 執行:協程開始執行其程式碼區塊。
  • 掛起:協程透過呼叫 chan <-select 語句掛起。
  • 恢復:協程透過 <-chanselect 語句恢復。
  • 完成:協程執行完成,或呼叫 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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板