作為對(duì)我的代碼的極大簡(jiǎn)化,我有一個(gè) goroutine 可以并行運(yùn)行數(shù)千次,每個(gè) goroutine 都在等待通過(guò)以下速率限制器運(yùn)行g(shù)olang.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...}這個(gè)想法是run()盡可能頻繁地執(zhí)行,但限制為恰好 100 次調(diào)用/秒,以符合第三方 API 的 100 RPS 速率限制。limiter.Wait()當(dāng)允許執(zhí)行繼續(xù)時(shí),這會(huì)導(dǎo)致競(jìng)爭(zhēng)條件嗎?因?yàn)槲胰匀皇艿降谌降乃俾氏拗啤?
1 回答

MM們
TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊
不,它沒有。
limiter.Wait()
是并發(fā)安全的,您可以在 Limiter 實(shí)現(xiàn)的源文件中看到這一點(diǎn)。
您可以在任何并發(fā)場(chǎng)景中自由使用 Limiter。
- 1 回答
- 0 關(guān)注
- 134 瀏覽
添加回答
舉報(bào)
0/150
提交
取消