大規模データを高速処理するための Golang WaitGroup と Goroutine の活用

Go言語でWaitGroupとゴルーチンを使用すると、ビッグデータ分析の処理を効率的にスピードアップできます。WaitGroupは、一連のゴルーチンが実行完了するまで待機するためのカウント信号量です。

まず、処理するデータを小さなチャンクに分割して、各チャンクの処理を協調ルーチンに任せます。これにより複数のチャンクを同時に処理でき、処理速度が向上します。

次に、WaitGroupを使用して、すべてのゴルーチンが実行完了したのを待ちます。各ゴルーチンを実行する前にWaitGroupにAddメソッドでカウンタを追加し、ゴルーチンが完了したらDoneメソッドでカウンタを1減らします。

そして最後に、主コーリユティンの中で、Waitメソッドによってすべてのコーリユティンが実行されるのを待つ。これによって、すべてのコーリユティンがタスクを完了してから、主コーリユティンが実行を続けることが保証される。

以下に、簡単なサンプル・コードを示します。

import (
"fmt"
"sync"
)
func process(data []int, wg *sync.WaitGroup) {
defer wg.Done()
// 处理数据
for _, d := range data {
// 处理逻辑
fmt.Println(d)
}
}
func main() {
data := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
chunkSize := 3
var wg sync.WaitGroup
// 将数据分成多个小块,并在协程中处理
for i := 0; i < len(data); i += chunkSize {
end := i + chunkSize
if end > len(data) {
end = len(data)
}
wg.Add(1)
go process(data[i:end], &wg)
}
// 等待所有协程完成
wg.Wait()
}

サンプルコードではデータを3個の塊に分割し、goroutineで処理しています。WaitGroupのカウンタは、Add(1)メソッドで3回追加され、各goroutineが処理を終了すると、Done()メソッドが呼び出されカウンタが減少しています。最後に、Wait()メソッドで全てのgoroutineが終了するまで待機しています。

WaitGroupとgoroutineを使用することで、大規模データセットを同時に処理でき、処理速度が向上して待ち時間が削減されます。

bannerAds