ホームページ  >  記事  >  バックエンド開発  >  基本チュートリアル: Go WaitGroup とそのアプリケーション (Golang)

基本チュートリアル: Go WaitGroup とそのアプリケーション (Golang)

王林
王林オリジナル
2023-09-28 09:42:38991ブラウズ

基础教程:Go WaitGroup及其在Golang中的应用

基本チュートリアル: Golang での Go WaitGroup とそのアプリケーション、特定のコード例が必要です

前書き:
Golang (Go 言語) では、同時実行の記述手順は次のとおりです。共通のタスク。 Golang は豊富な同時実行プリミティブと API を提供します。重要なツールの 1 つは WaitGroup です。この記事では、WaitGroup の概念と使用法を紹介し、いくつかの具体的なコード例を示します。

1. WaitGroup の概念
WaitGroup は Golang の同時実行プリミティブであり、ゴルーチンのグループの完了を待つために使用されます。 WaitGroup は内部でカウンターを維持し、初期値は 0 です。各コルーチンの実行が開始されると、カウンターが 1 ずつ増加します。コルーチンが終了すると、カウンターは 1 つ減ります。メインスレッドは、カウンターが 0 に達するまで、つまりすべてのコルーチンが実行されるまで、Wait() メソッドを通じてブロックできます。

2. WaitGroup の基本的な使用法
WaitGroup を使用するには、次の手順が必要です:

  1. WaitGroup オブジェクトを作成します: まず、「sync」パッケージをインポートする必要があります。 、WaitGroup オブジェクトを作成します。

    import "sync"
    
    var wg sync.WaitGroup
  2. コルーチンを WaitGroup に追加: 実行するコルーチンごとに、カウンターをインクリメントし、go キーワードを使用して新しいコルーチンでタスクを実行する必要があります。

    wg.Add(1)
    go func() {
     // 协程的具体逻辑
     // ...
     wg.Done() // 协程执行完成后减少计数器
    }()
  3. コルーチンの完了を待機: メインスレッドは Wait() メソッドを使用して、カウンターが 0 になるまで、つまりすべてのコルーチンが実行されるまでブロックできます。

    wg.Wait()

サンプル コード:
以下は、Golang での WaitGroup のアプリケーションを示す具体的なコード例です。この例では、WaitGroup を使用して複数のコルーチンが完了するのを待ってから、後続のロジックを続行します。

package main
 
import (
    "fmt"
    "sync"
    "time"
)
 
func main() {
    var wg sync.WaitGroup
 
    for i := 0; i < 5; i++ {
        wg.Add(1)
 
        go func(num int) {
            defer wg.Done()
            time.Sleep(time.Second) // 模拟长时间的任务
 
            fmt.Printf("协程 %d 完成
", num)
        }(i)
    }
 
    fmt.Println("等待所有协程完成...")
    wg.Wait()
    fmt.Println("所有协程已完成!")
}

上の例では、5 つのコルーチンの実行をシミュレートし、各コルーチンは 1 秒待機しました。 WaitGroup を使用すると、すべてのコルーチンが実行されるまでメインスレッドがブロックされます。出力では、コルーチンは並列実行されるため、完了する順序が固定されていないことがわかります。

3. WaitGroup に関する注意事項
WaitGroup を使用する場合は、次の注意事項に従う必要があります:

  1. Wait() を呼び出す前に、各コルーチンは Call Done() を実行する必要があります。カウンタがデクリメントされていることを確認します。そうしないと、メインスレッドが永久にブロックされてしまいます。
  2. WaitGroup は値によって渡されるため、関数またはメソッドに渡すときは、値のコピーではなく、必ずポインターを渡してください。
  3. 複数の WaitGroup オブジェクトを使用して相互に待機しないでください。デッドロックが発生します。

結論:
WaitGroup は Golang の非常に便利な同時実行プリミティブで、コルーチンのグループの完了を便利に待つことができます。この記事では、WaitGroup の基本概念と使用法を紹介し、具体的なコード例を示します。この記事を学習することで、Golang での WaitGroup の使用法をよりよく理解し、応用できるようになれば幸いです。

以上が基本チュートリアル: Go WaitGroup とそのアプリケーション (Golang)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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