作为对我的代码的极大简化,我有一个 goroutine 可以并行运行数千次,每个 goroutine 都在等待通过以下速率限制器运行golang.org/x/time/rate:func main() { limiter := rate.NewLimiter(rate.Every(time.Second/100), 1) // 100 RPS for _ := range jobs { go run(&limiter) }}func run(limiter *rate.Limiter) { limiter.Wait() // do stuff...}这个想法是run()尽可能频繁地执行,但限制为恰好 100 次调用/秒,以符合第三方 API 的 100 RPS 速率限制。limiter.Wait()当允许执行继续时,这会导致竞争条件吗?因为我仍然受到第三方的速率限制。
1 回答

MM们
TA贡献1886条经验 获得超2个赞
不,它没有。
limiter.Wait()
是并发安全的,您可以在 Limiter 实现的源文件中看到这一点。
您可以在任何并发场景中自由使用 Limiter。
- 1 回答
- 0 关注
- 103 浏览
添加回答
举报
0/150
提交
取消