高負荷大量データ処理:Go言語WaitGroupとgoroutineを使用した実装
Goでは、sync.WaitGroupとゴルーチンを使用することで、高頻度で大規模なデータ処理が行えます。sync.WaitGroupは、一つのゴルーチングループの終了を待つのに使用できるカウンタシグナルです。
以下は、sync.WaitGroupとゴルーチンを使用して大量のデータを処理する方法を示すサンプルコードです。
package main
import (
"fmt"
"sync"
)
func processData(data int, wg *sync.WaitGroup) {
defer wg.Done()
// 在这里编写处理数据的业务逻辑
// ...
fmt.Println("Processing data:", data)
}
func main() {
var wg sync.WaitGroup
data := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
for _, d := range data {
wg.Add(1)
go processData(d, &wg)
}
wg.Wait()
fmt.Println("All data processed.")
}
上記のサンプルコードでは、最初に `sync.WaitGroup` オブジェクトの `wg` が作成されています。次に、整数型のデータと `sync.WaitGroup` オブジェクトへのポインタを受け取る `processData` 関数が定義されています。`processData` 関数内で、データ処理のビジネスロジックを記述し、関数の最後に `wg.Done()` を呼び出して、`WaitGroup` オブジェクトにカウントを 1 減らすことを通知します。
main関数では、処理対象のデータを表す整数のスライスdataを作成。その後、dataスライスを繰り返し処理し、各データに対してWaitGroupオブジェクトのカウントを増やすwg.Add(1)を呼び出し、goキーワードでprocessData関数を処理する新たなゴルーチンを起動。最後に、wg.Wait()を呼び出すことで全てのゴルーチンが終了するのを待つ。
全てのcoroutineが終了すると、「すべてのデータが処理されました。」と出力する。
高並行のビッグデータ処理を実現するために、sync.WaitGroupとゴルーチンを使用することで、各データを独立したゴルーチンで処理することで処理速度が向上します。さらに、sync.WaitGroupを使用することで、すべてのゴルーチンが完了するまで後続のコードの実行を待機できます。