ホームページ > バックエンド開発 > Golang > Go WaitGroup を使用して効率的な同時処理タスクを実装する

Go WaitGroup を使用して効率的な同時処理タスクを実装する

王林
リリース: 2023-09-27 15:01:13
オリジナル
1043 人が閲覧しました

使用Go WaitGroup实现高效并发处理任务

Go WaitGroup を使用して効率的な同時処理タスクを実現する

Go 言語では、WaitGroup を使用して効率的な同時処理タスクを実現します。 WaitGroup は、次のステップに進む前にゴルーチンのグループが作業を完了するのを待つために使用されるカウント セマフォです。

WaitGroup には、Add()、Done()、および Wait() という 3 つの主要なメソッドがあります。 Add() メソッドは待機中のゴルーチンの数を増やすために使用され、Done() メソッドはゴルーチンが完了したことを示し、Wait() メソッドはすべてのゴルーチンが完了するまでメインのゴルーチンをブロックするために使用されます。

以下では、簡単な例を使用して、WaitGroup を使用してタスクを同時に処理する方法を説明します。

まず、WaitGroup インスタンスを作成する必要があります:

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

次に、Add() メソッドを使用して待機中のゴルーチンの数を増やし、次の時点で Done() メソッドを呼び出します。各ゴルーチンの終わり:

func main() {
    // 设置等待的goroutine数量
    wg.Add(2)

    // 启动第一个goroutine
    go doTask1()

    // 启动第二个goroutine
    go doTask2()

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

func doTask1() {
    // 模拟任务1
    time.Sleep(time.Second * 1)
    fmt.Println("Task 1 is done!")

    // 调用Done()方法表示任务完成
    wg.Done()
}

func doTask2() {
    // 模拟任务2
    time.Sleep(time.Second * 2)
    fmt.Println("Task 2 is done!")

    // 调用Done()方法表示任务完成
    wg.Done()
}
ログイン後にコピー

上の例では、doTask1() 関数と doTask2() 関数を実行する 2 つのゴルーチンを作成しました。各関数は、時間のかかるタスクをシミュレートします。すべてのゴルーチンを開始した後、メインのゴルーチンは Wait() メソッドを呼び出し、すべてのタスクが完了するまで自身をブロックします。

上記のコードを実行すると、次のような出力が得られます。

Task 1 is done!
Task 2 is done!
ログイン後にコピー

2 つのタスクが並行して実行され、完了後に対応する情報が出力されることがわかります。 WaitGroup を使用すると、同時処理が容易になり、すべてのタスクが完了した後にメインの goroutine の実行が再開されます。

WaitGroup を使用する場合、各タスクが Done() メソッドを呼び出すようにする必要があることに注意してください。そうしないと、メインの goroutine が常に Wait() メソッドでブロックされ、プログラムが実行できなくなります。実行を継続します。

要約すると、Go WaitGroup は、効率的な同時処理タスクの実現に役立つ、シンプルで効果的な同時実行制御ツールです。 Add()、Done()、および Wait() メソッドを呼び出すことで、ゴルーチンの実行順序を制御し、すべてのタスクが完了した後も後続の操作を実行し続けることができます。

この記事が、同時処理タスクを理解し、Go WaitGroup を使用するのに役立つことを願っています。

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

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