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.
...
萌新提问, 感谢~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.