- 博客(4)
- 收藏
- 关注
原创 时间轮的介绍(对比Java原生的Timer,ScheduledThreadPool和DelayQueue)
对比而言时间轮更适合任务数很大的延时场景,它的任务插入和删除时间复杂度都为O(1)。对于延迟超过时间轮所能表示的范围有两种处理方式,一是通过增加一个字段-轮数,Netty 就是这样实现的。二是多层次时间轮,Kakfa 是这样实现的。相比而言 Netty 的实现会有空推进的问题,而 Kafka 采用 DelayQueue 以槽为单位,利用空间换时间的思想解决了空推进的问题。可以看出延迟任务的实现都不是很精确的,并且或多或少都会有阻塞的情况,即使你异步执行,线程不够的情况下还是会阻塞。
2023-11-27 17:27:29
247
原创 服务限流常见算法和实现
前面的58分钟都没来请求,第59分钟来了10个请求,然后到了一个小时刷新了次数,第61分 钟又来了10个请求,相当于两分钟内处理了20个请求,服务器承受不了。限流,就是流量控制。在固定时间窗口的基础上,把一个时间周期拆成很多个小周期,每个小周期都有计数器,每个小周期独立计数,将整个周期中所有小周期的计数器加起来当作总的访问次数。一个桶只有10的容量,每0.1秒固定处理一个请求,若1秒内来了11个请求,最后一个会被拒绝。每过一个小的时间周期,时间窗口就往后滑一位,即抛弃最早的小周期,开启新的小周期。
2023-11-21 00:27:04
69
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人