最適化:GoのWaitGroupを活用することでシステムリソースの消費量を削減

Go言語では、同期化処理を行うsync.WaitGroupは、特にマルチタスク時にシステムリソースの消費を抑えることができます。

sync.WaitGroupは、一連の並行処理が完了するのを待つためのカウンターです。主として、並行処理中の全ての処理が完了するまで待つという課題を解決するために用いられます。

ここでは、sync.WaitGroupを使用してパフォーマンスを最適化するコードの例を紹介します。

package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func(index int) {
defer wg.Done()
time.Sleep(time.Second) // 模拟耗时的操作
fmt.Println("Finished:", index)
}(i)
}
wg.Wait() // 等待所有goroutine完成
fmt.Println("All finished.")
}

上の例では、時間を要する処理を並行実行するために10個のgoroutineを作っています。カウンタの値をwg.Add(1)で増やすことで、完了を待つタスクがあることを意味しています。goroutineごとに最後にwg.Done()を呼ぶことで、タスクが完了したことをカウンタの値を減らすことで意味します。

最後に、wg.Wait() を呼び出してすべてのタスクが完了するまで待つ。すべてのタスクが完了したら、プログラムは以降のコードを実行する。

非同期処理における待機時間を削減し、並行性を高めるためにsync.WaitGroupが効果的に使用できます。さらに、複数の非同期タスクを効果的に管理でき、コードの透明性と可読性を向上させます。

bannerAds