为了账号安全,请及时绑定邮箱和手机立即绑定

在并行 goroutine 中使用速率限制器会导致竞争条件吗?

在并行 goroutine 中使用速率限制器会导致竞争条件吗?

Go
富国沪深 2023-02-06 19:32:44
作为对我的代码的极大简化,我有一个 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。


查看完整回答
反对 回复 2023-02-06
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号