问题很简单:
- 一个小时有3600秒,就以这个为单位,按照每秒来的方式发起请求
- 如果在这个期间有36次请求,那么就是1次/100秒,如果有360次请求,就是1次/10秒
这个不难,那如果说:
- 3600秒有19次请求,那么就是189.47次,那肯定不可能是1次/189.47秒,因为是按照秒来发起请求的,但是如果按照1次/190秒来算,那在3600秒里面肯定是完不成19次请求的,如果按照1次/188秒来算,就分配的不是特别均匀(后面还空出28秒),也就是说如何尽可能的将19均分在3600上,然后面空出的数字越少越好
- 如果说3600秒请求7520次请求,如何能算出每秒需发起多少次请求才能平均且合理呢?
- 如果说3600秒请求31次请求,如何能算出多少秒发起一次请求比较平均且合理呢?
把累积的小数误差体现在后面的计算中即可消灭最后的累积误差。
也就是说每次使用“剩余时间”和“剩余次数”而非“总时间”和“总次数”来计算,这样每次向下取整,剩余时间就会变多一些,后面就更倾向于向上取整一些,反之亦然。误差会在不超过正负1的区间内摇摆而不会累积
结果(最后那个请求次数超过时间两倍的例子,为了展示方便缩减为36秒)