ホームページ > バックエンド開発 > Golang > Go WaitGroup を使用して同時タスクを処理する方法

Go WaitGroup を使用して同時タスクを処理する方法

PHPz
リリース: 2023-09-27 21:54:37
オリジナル
1175 人が閲覧しました

如何使用Go WaitGroup处理并发任务

Go WaitGroup を使用して同時タスクを処理する方法

Go 言語では、sync.WaitGroup を使用して同時タスクを処理できます。 sync.WaitGroup は、同時タスクを処理するときにコルーチンの実行を調整するための簡潔かつ効果的な方法を提供します。

sync.WaitGroup は便利なツールであり、待機する必要があるコルーチンの数がわからない場合に同時タスクを処理するための推奨方法です。これにより、すべてのタスクが完了するまでメイン コルーチンが実行を終了しないようにすることができます。

sync.WaitGroup を使用して同時タスクを処理する方法を示す具体的な例を見てみましょう。

まず、sync パッケージをインポートする必要があります:

import (
    "fmt"
    "sync"
)
ログイン後にコピー

次に、sync.WaitGroup オブジェクトを作成しましょう:

var wg sync.WaitGroup
ログイン後にコピー

次に、Add メソッドを呼び出して、待機するタスクの数を追加します。この例では、2 つのタスクを追加します。

wg.Add(2)
ログイン後にコピー

次に、タスクを実行する 2 つのコルーチンを開始できます。タスクを匿名関数にカプセル化し、パラメータとして go キーワードに渡すことができます。

go func() {
    defer wg.Done()
    // 这里是第一个任务的代码逻辑
}()

go func() {
    defer wg.Done()
    // 这里是第二个任务的代码逻辑
}()
ログイン後にコピー

この例では、各コルーチン内の go キーワードの後に​​ defer wg.Done() を配置して、タスクの完了後に確実に通知できるようにします。 WaitGroup オブジェクト。

最後に、Wait メソッドを実行して、すべてのタスクが完了するまでメイン コルーチンをブロックします。このメソッドは、WaitGroup オブジェクト内のタスクの数をゼロに減らします。

wg.Wait()
ログイン後にコピー

以下は完全なサンプル コードです:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    wg.Add(2)

    go func() {
        defer wg.Done()
        fmt.Println("Task 1 executed")
    }()

    go func() {
        defer wg.Done()
        fmt.Println("Task 2 executed")
    }()

    wg.Wait()
    fmt.Println("All tasks completed")
}
ログイン後にコピー
このコードを実行すると、出力に 2 つのタスクの実行結果が表示され、その後「すべてのタスクが完了しました」と表示されることがわかります。

sync.WaitGroup を使用すると、同時タスクを簡単に処理でき、メイン コルーチンの実行を続行する前にすべてのタスクが完了していることを確認できます。これは、クローラー、並列コンピューティング、その他のシナリオなど、メイン コルーチンですべてのタスクが完了するのを待つ必要がある場合に特に便利です。

要約すると、

sync.WaitGroup を使用すると、Go 言語での同時タスクの処理に役立ちます。これは、コルーチンの実行を調整し、メイン コルーチンの実行を続行する前にすべてのタスクが確実に完了するようにするための簡潔で効果的な方法を提供します。この記事が同時タスク処理の理解に役立つことを願っています。

(総単語数: 409)

以上がGo WaitGroup を使用して同時タスクを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート