1 RateLimiter
- RateLimiter由于会累积令牌,所以可以应对突发流量;
- RateLimiter在没有足够令牌发放时,采用滞后处理的方式,也就是前一个请求获取令牌所需等待的时间由下一 次请求来承受,也就是代替前一个请求进行等待;
1.1 RateLimiter核心函数及成员变量
1.2RateLimiter两种限流器
1.3quire函数调用过程
2 RateLimiter的预支付令牌原理
-
当一个线程所需要的令牌数大于库存令牌数时, 就令此线程睡眠到nextFreeTicketMicros时间,再去预支付令牌,此时根据预支付的令牌数N,去更新nextFreeTicketMicros:nextFreeTicketMicros = N * stableIntervalMicros + nextFreeTicketMicros ;
-
下一个线程若想进行预支付,则需等到上次线程更新后的nextFreeTicketMicros时间才能进行预支付功能;