uber-go 中的 ratelimit 包, 为何 sleepFor 不能小于 maxSlack 呢?

2021-01-24 19:05:22 +08:00
 RedisMasterNode

Take方法见: https://github.com/uber-go/ratelimit/blob/master/limiter_atomic.go

其中有一段代码:

...
		if newState.sleepFor < t.maxSlack {
			newState.sleepFor = t.maxSlack
		}
...

sleepFor是“间隔时间-上次执行时间至当前时间”, 例如间隔时间为 1 秒, 上次执行时间为 5 秒前, sleepFor 就是-4

sleepFor在末尾用于t.clock.Sleep(newState.sleepFor),貌似没有别的用途,那为什么需要让它不能小于t.maxSlack

或者如果有 dalao 明白这段注释的意思也可以解释一下:

...
		// We shouldn't allow sleepFor to get too negative, since it would mean that
		// a service that slowed down a lot for a short period of time would get
		// a much higher RPS following that.
...

萌新提问, 感谢~

972 次点击
所在节点    Go 编程语言
2 条回复
zhangsanfeng2012
2021-01-25 09:40:57 +08:00
限制突发吧,我猜的
RedisMasterNode
2021-01-28 11:45:03 +08:00
@zhangsanfeng2012 道理都懂,可是代码里面明明没有在用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/747926

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX