控制访问速率,令牌桶
- 每过1/r秒桶中增加一个令牌。
- 桶中最多存放b个令牌,如果桶满了,新放入的令牌会被丢弃。
- 当一个n字节的数据包到达时,消耗n个令牌,然后发送该数据包。
- 如果桶中可用令牌小于n,则该数据包将被缓存或丢弃。
令牌桶控制的是一个时间窗口内通过的数据量,在API层面我们常说的QPS、TPS,正好是一个时间窗口内的请求量或者事务量,只不过时间窗口限定在1s罢了。以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。令牌桶的另外一个好处是可以方便的改变速度,一旦需要提高速率,则按需提高放入桶中的令牌的速率。
并发10个
- 每隔200ms去执行一个(1s 执行 5个,另5个拒绝)
- 每隔200ms去执行一个(2s 执行完10个)
转自:
版权声明:本文为CSDN博主「Ricky_Fung」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/top_code/article/details/53242262
控制并发数,信号量
信号量限制的是最大并发数,最终也能达到限流的作用;
并发10个
- 直接5个可以立刻执行,另5个可以选择拒绝;可以等执行完信号量释放掉然后执行;或者设置一定时间获取信号量后,获取不到拒绝
参考上一篇:https://blog.csdn.net/qq_26437925/article/details/99291034