登录
首页 >  Golang >  Go问答

在并发 goroutine 中使用速率限制器是否会引发竞争问题?

来源:stackoverflow

时间:2024-02-25 08:24:26 122浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《在并发 goroutine 中使用速率限制器是否会引发竞争问题?》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

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


正确答案


不,事实并非如此。

limiter.Wait() 是并发安全的,您可以在 Limiter 实现的源文件中看到这一点。

您可以在任何并发场景中自由使用Limiter。

今天关于《在并发 goroutine 中使用速率限制器是否会引发竞争问题?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>