快速响应:Go WaitGroup在高并发场景下的应用
在高并发场景下,Go的WaitGroup是一种有效的工具,用于等待一组goroutine完成其任务。WaitGroup有三个方法可以使用:- `Add`:表示等待的goroutine数量增加n。下面是一个使用WaitGroup的示例代码,在高并发场景下,使用goroutine处理任务,并使用WaitGroup等待所有goroutine完成:```gopackage mainimport func main() {var wg sync.WaitGroupfor i := 0; i wg.Addgo func {defer wg.Done()time.Sleep // 模拟任务处理时间fmt.Printf}}wg.Wait() // 等待所有任务完成fmt.Println}```在上面的代码中,我们创建了10个goroutine来处理任务。最后,调用`Wait()`活动:慈云数据爆款香港服务器,CTG+CN2高速带宽、快速稳定、平均延迟10+ms 速度快,免备案,每月仅需19元!!
在高并发场景下,Go的WaitGroup是一种有效的工具,用于等待一组goroutine完成其任务。
WaitGroup有三个方法可以使用:
- `Add(n int)`:表示等待的goroutine数量增加n。
- `Done()`:表示等待的goroutine数量减少1。
- `Wait()`:阻塞等待,直到等待的goroutine数量为0。
下面是一个使用WaitGroup的示例代码,在高并发场景下,使用goroutine处理任务,并使用WaitGroup等待所有goroutine完成:
```go
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
for i := 0; 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()`活动:慈云数据爆款香港服务器,CTG+CN2高速带宽、快速稳定、平均延迟10+ms 速度快,免备案,每月仅需19元!! 点击查看方法来阻塞等待,直到所有goroutine完成任务。
通过使用WaitGroup,我们可以保证在高并发场景下,所有的goroutine都能够完成任务后再执行后续的操作。