大規模タスク処理:並行性を最適化するGo WaitGroupを用いた方法

Go言語では、大規模タスクにおける並列化の最適化に sync.WaitGroup を使用できます。WaitGroup は一群のgoroutineが作業を完了するまで待機するカウンターです。

以下に、sync.WaitGroupを使用した並行処理の最適化手法のサンプルコードを示します。

package main
import (
"fmt"
"sync"
)
func main() {
// 创建WaitGroup
var wg sync.WaitGroup
// 设置要处理的任务数量
taskCount := 10
// 增加WaitGroup的计数器
wg.Add(taskCount)
// 启动goroutine执行任务
for i := 0; i < taskCount; i++ {
go func(taskID int) {
// 执行任务的逻辑
fmt.Printf("Task %d started\n", taskID)
// 模拟任务的耗时操作
for j := 0; j < 100000000; j++ {
}
fmt.Printf("Task %d finished\n", taskID)
// 减少WaitGroup的计数器
wg.Done()
}(i)
}
// 等待所有任务完成
wg.Wait()
fmt.Println("All tasks finished")
}

上記のサンプルコードでは、まずWaitGroupを作成し、そこで処理するタスク数を10に設定しています。次に、wg.Add(taskCount)を使用してWaitGroupのカウンターを増やします。

各タスクのgoroutineを起動する前に、匿名関数を用いてタスクIDを渡し、そのgoroutine内でタスクのロジックを実行する。タスクが完了したら、wg.Done()を用いてWaitGroupのカウンタを減らす。

最後に、すべてのタスクが完了するまで wg.Wait() を使用して待機します。すると、すべてのタスクが完了し、プログラムは実行を続行し「All tasks finished」を出力します。

sync.WaitGroup を使うことで、大規模タスクの並列実行を簡単 に管理でき、すべてのタスクが終わってから続くコードを実行するよ うにできます。

bannerAds