你使用的是什么版本的 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 关注
- 159 浏览
添加回答
举报
0/150
提交
取消