作为对我的代码的极大简化,我有一个 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()当允许执行继续时,这会导致竞争条件吗?因为我仍然受到第三方的速率限制。
MM们
相关分类