uber-go 中的 ratelimit 包, 为何 sleepFor 不能小于 maxSlack 呢?
資深大佬 : RedisMasterNode 4
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. ...
萌新提问, 感谢~
大佬有話說 (1)