Golangにおける同時実行タスクとその同期のためのWaitGroup

Go言語では、goroutine とチャンネルを利用してタスクを並行実行できます。goroutine は軽量スレッドで、複数のタスクを並行して実行できます。チャンネルは、異なる goroutine 間の通信やデータの受け渡しに使用します。

まず、goroutine を起動して関数を並列実行します。例:

func main() {
go myFunc()  // 启动一个goroutine并发执行myFunc函数
// 其他的代码
}
func myFunc() {
// 执行任务的逻辑
}

並行的に複数のタスクを実行する必要があり、それらが完了するまで後続のコードの実行を待機する必要がある場合は、sync.WaitGroupを使用できます。WaitGroupは、一連のgoroutineの完了を待機するために使用されるカウンタです。

import "sync"
func main() {
var wg sync.WaitGroup
wg.Add(2)  // 设置需要等待的goroutine数量
go myFunc1(&wg)  // 启动goroutine并发执行myFunc1函数
go myFunc2(&wg)  // 启动goroutine并发执行myFunc2函数
wg.Wait()  // 等待所有goroutine完成
// 所有任务完成后继续执行后续的代码
}
func myFunc1(wg *sync.WaitGroup) {
defer wg.Done()  // 任务完成时通知WaitGroup计数器减1
// 执行任务1的逻辑
}
func myFunc2(wg *sync.WaitGroup) {
defer wg.Done()  // 任务完成时通知WaitGroup计数器减1
// 执行任务2的逻辑
}

各タスクの最後にdeferキーワードを使用してwg.Done()を呼び出し、WaitGroupのカウンタを1減らして通知します。カウンタがゼロになると、Waitメソッドが返され、プログラムは後続のコードを実行し続けます。

GoroutineとWaitGroupを使うことで、タスクの同時実行と待ち受けを実現できます。これにより、マルチコアプロセッサの並列計算能力を活用し、プログラムの実行効率を向上させることができます。

bannerAds