令牌桶限流 和 信号量 理解

控制访问速率,令牌桶

  • 每过1/r秒桶中增加一个令牌。
  • 桶中最多存放b个令牌,如果桶满了,新放入的令牌会被丢弃。
  • 当一个n字节的数据包到达时,消耗n个令牌,然后发送该数据包。
  • 如果桶中可用令牌小于n,则该数据包将被缓存或丢弃。

令牌桶控制的是一个时间窗口内通过的数据量,在API层面我们常说的QPS、TPS,正好是一个时间窗口内的请求量或者事务量,只不过时间窗口限定在1s罢了。以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。令牌桶的另外一个好处是可以方便的改变速度,一旦需要提高速率,则按需提高放入桶中的令牌的速率。

在这里插入图片描述
并发10个

  1. 每隔200ms去执行一个(1s 执行 5个,另5个拒绝)
  2. 每隔200ms去执行一个(2s 执行完10个)

转自:
版权声明:本文为CSDN博主「Ricky_Fung」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/top_code/article/details/53242262

控制并发数,信号量

信号量限制的是最大并发数,最终也能达到限流的作用;
在这里插入图片描述
并发10个

  1. 直接5个可以立刻执行,另5个可以选择拒绝;可以等执行完信号量释放掉然后执行;或者设置一定时间获取信号量后,获取不到拒绝

参考上一篇:https://blog.csdn.net/qq_26437925/article/details/99291034

发布了441 篇原创文章 · 获赞 110 · 访问量 57万+

猜你喜欢

转载自blog.csdn.net/qq_26437925/article/details/99552063