你使用的是什么版本的 Go ( go version)?go version輸出:go 版本 go1.12.17 darwin/amd64您使用的是什么版本的軟件包(rate version)?golang.org/x/time v0.0.0-20190308202827-9d24e82272b4你做了什么?在 amd64 上運行以下命令:package mainimport ( "fmt" "golang.org/x/time/rate" "sync" "sync/atomic" "time")func main() { now := time.Now() t := time.After(time.Second) limit := rate.Limit(100) burst := 10 l := rate.NewLimiter(limit, burst) var count int for { select { case <-t: fmt.Printf("%ds, %d\n", time.Now().Sub(now).Nanoseconds()/1e9, count) return default: if l.Allow() { count++ } } }}你期待看到什么?1s, 10你看到了什么?1s, 110我很困惑count不等于突發大小。當我設置 Limit=100,burst=10 時,它應該允許()最大調用是突發的。
1 回答

慕婉清6462132
TA貢獻1804條經驗 獲得超2個贊
突發不是最大速率。除了重新填充率之外,它是存儲桶中令牌的數量。
您將速率設置為每秒 100 個令牌,突發容量設置為 10。
程序運行一秒鐘內可以消耗 100 個令牌,再加上突發容量增加的 10 個令牌,這并不奇怪。
如果您希望在一秒鐘內發生的事情不超過 10 件,請將速率設置為 10 并將突發設置為零。
- 1 回答
- 0 關注
- 171 瀏覽
添加回答
舉報
0/150
提交
取消