首頁  >  文章  >  後端開發  >  Golang協程的創建與生命週期

Golang協程的創建與生命週期

PHPz
PHPz原創
2024-04-15 17:06:02715瀏覽

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

Golang協程的創建與生命週期

Golang協程的建立與生命週期

簡介

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

建立協程

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

go <协程体>

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

協程的生命週期

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

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

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