ホームページ >バックエンド開発 >Golang >golang 関数同時実行制御の組み込み構文と関数の紹介

golang 関数同時実行制御の組み込み構文と関数の紹介

WBOY
WBOYオリジナル
2024-04-24 18:03:01864ブラウズ

Go 言語は、組み込み構文を通じて関数の同時実行性を制御します。これには、 go func() による Goroutine の作成、sync.Mutex ミューテックスによる共有データの保護、sync.WaitGroup 待機グループによる Goroutine の実行の調整、および sync.Cond 条件変数の協調制御が含まれます。これらの組み込み構文は、同時実行、データ保護、協調制御をサポートし、プログラムのパフォーマンスを最適化するフィボナッチ数列の並列計算の例でその実際の応用例を示します。

golang 関数同時実行制御の組み込み構文と関数の紹介

Go 言語関数の同時実行制御の組み込み構文と関数の紹介

Go 言語の同時実行は次のように実装されます。 Goroutine Goroutine Go 言語の軽量スレッドです。 Goroutine を使用すると、マルチコア CPU を最大限に活用してプログラムのパフォーマンスを向上させる同時実行プログラムを作成できます。

組み込み構文

Go 言語には、関数の同時実行性を制御するための次の組み込み構文が用意されています:

  • go func(): func 関数を同時に実行する新しいゴルーチンを作成します。
  • sync.Mutex: 共有データを保護するために使用されるミューテックス ロック。
  • sync.WaitGroup: 待機グループ。Goroutine のグループが完了するのを待つために使用されます。
  • sync.Cond: 条件変数。Goroutine 間のコラボレーションを調整するために使用されます。

機能

これらの組み込み構文は次の機能を提供します:

  • 同時実行:並列実行可能 複数のGoroutineを実行して、マルチコアCPUリソースを最大限に活用します。
  • データ保護: ミューテックス ロックを使用すると、共有データに同時に 1 つの 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。