高速応答:GoのWaitGroupの同時実行性の高いシーンでの応用

高並行処理シナリオで、GoのWaitGroupはgoroutine群が自身のタスクを終了するのを待つための効果的なツールです。

WaitGroup には、3 つのメソッドが使用できます。

  1. Add(n int):待機中の Goroutine 数にnを加算する。
  2. Done(): 同時に待機しているgoroutineの数を1減らす。
  3. Wait():待機する goroutine の個数がゼロになるまで、ブロッキング待機する。

高並行環境で Goroutine を使用してタスクを処理し、WaitGroup を使用してすべての Goroutine が完了するのを待つサンプルコードを以下に示します。

package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func(n int) {
defer wg.Done()
time.Sleep(time.Second) // 模拟任务处理时间
fmt.Printf("Task %d completed\n", n)
}(i)
}
wg.Wait() // 等待所有任务完成
fmt.Println("All tasks completed")
}

上のコードでは、10個のgoroutineを作成し、それぞれにタスクを処理させました。各goroutineはタスクの処理が完了すると、待機中のgoroutineの数を減らすためにDone()メソッドを呼び出します。最後に、すべてのgoroutineがタスクを完了するまで待機するために、Wait()メソッドを呼び出してブロックします。

WaitGroupを利用することで、高并发な場面で全てのgoroutineがタスクを完了してから後続の処理を実行できます。

bannerAds