美文网首页
go-rate库-限流

go-rate库-限流

作者: teeth | 来源:发表于2022-06-26 10:08 被阅读0次

https://pkg.go.dev/github.com/beefsack/go-rate#section-sourcefiles

用法

  • new():创建一个实例
  • wait():用来阻塞等待
  • try():返回两个值,一个是表示是否可以立刻执行,另一个是需要延迟多久执行

实现

它的实现是,任何一段时间interval内,不能有超过limit个请求

维护一个队列,队列头是最早的时间,队列元素不会删(相当于固定的token数),到了limit后就从头部移动到尾部

假如当前队列中数目不超过limit个(最一开始的情况)

后面的情况就是:每次对比下队列中最早的时间和当前时间,最早时间超过了当前时间说明已经被处理过了相当于有空闲token了,所以可以处理(设置时间,移动到队列尾),不用sleep;否则就sleep这个差值。

其他

它的处理不是时间片均匀的, 比如说设置1s有100个token,有100个线程来抢,cpu处理很快的话,可能0.1秒就处理完了剩下0.9秒都是闲的,这样的话CPU峰值会高但其他时间可能很闲。即CPU的工作不是很均匀。

相关文章

网友评论

      本文标题:go-rate库-限流

      本文链接:https://www.haomeiwen.com/subject/bhawvrtx.html