阅读量:2
在高并发场景下,Go的WaitGroup是一种有效的工具,用于等待一组goroutine完成其任务。
WaitGroup有三个方法可以使用:
Add(n int)
:表示等待的goroutine数量增加n。Done()
:表示等待的goroutine数量减少1。Wait()
:阻塞等待,直到等待的goroutine数量为0。
下面是一个使用WaitGroup的示例代码,在高并发场景下,使用goroutine处理任务,并使用WaitGroup等待所有goroutine完成:
package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func(n int) { defer wg.Done() time.Sleep(time.Second) // 模拟任务处理时间 fmt.Printf("Task %d completed\n", n) }(i) } wg.Wait() // 等待所有任务完成 fmt.Println("All tasks completed") }
在上面的代码中,我们创建了10个goroutine来处理任务。每个goroutine在完成任务后,调用Done()
方法来减少等待的goroutine数量。最后,调用Wait()
方法来阻塞等待,直到所有goroutine完成任务。
通过使用WaitGroup,我们可以保证在高并发场景下,所有的goroutine都能够完成任务后再执行后续的操作。