首頁  >  文章  >  後端開發  >  golang函數並發控制的內建語法與功能介紹

golang函數並發控制的內建語法與功能介紹

WBOY
WBOY原創
2024-04-24 18:03:01826瀏覽

Go 語言透過內建語法控制函數並發,包括:go func() 建立 Goroutine,sync.Mutex 互斥鎖保護共享數據,sync.WaitGroup 等待群組協調 Goroutine 執行,sync.Cond 條件變數協作控制。這些內建語法支援並發執行、資料保護和協作控制,優化程式效能,並行計算斐波那契數列案例展示了其實戰應用。

golang函數並發控制的內建語法與功能介紹

Go 語言函數並發控制的內建語法與功能介紹

Go 語言中的並發是透過Goroutine 實現的,Goroutine是Go 語言中輕量級的執行緒。透過使用 Goroutine,我們可以編寫並發程序,以充分利用多核心 CPU 的優勢,提升程式效能。

內建語法

Go 語言提供了以下內建語法來控制函數並發:

  • go func():建立一個新的Goroutine,該Goroutine 會並發執行func 函數。
  • sync.Mutex:互斥鎖,用於保護共享資料。
  • sync.WaitGroup:等待群組,用於等待一組 Goroutine 完成。
  • sync.Cond:條件變量,用於協調 Goroutine 之間的協作。

功能

這些內建語法提供了以下功能:

  • 並發執行:可以並行執行多個Goroutine,從而充分利用多核心CPU 資源。
  • 資料保護:互斥鎖可以確保共享資料在同一時間只被一個 Goroutine 訪問,防止資料損壞。
  • 協作控制:等待群組和條件變數可以控制 Goroutine 之間的協作,確保它們以正確的順序執行。

實戰案例

以下是一個計算斐波那契數列的實戰案例,示範如何使用Goroutine 進行並發計算:

package main

import (
    "fmt"
    "sync"
)

// 计算斐波那契数列
func fibonacci(n int) int {
    if n <= 1 {
        return n
    }
    return fibonacci(n-1) + fibonacci(n-2)
}

func main() {
    // 创建互斥锁保护计数器
    var mu sync.Mutex
    // 创建等待组等待所有 Goroutine 完成
    var wg sync.WaitGroup

    // 并发计算斐波那契数列
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(i int) {
            defer wg.Done()
            result := fibonacci(i)

            // 使用互斥锁保护计数器
            mu.Lock()
            fmt.Printf("Fibonacci(%d) = %d\n", i, result)
            mu.Unlock()
        }(i)
    }

    // 等待所有 Goroutine 完成
    wg.Wait()
}

這個程式會並行計算斐波那契數列前10 個數,並使用互斥鎖保護輸出,確保每個數的列印都是依序進行的。

以上是golang函數並發控制的內建語法與功能介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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