定时器
使用场景
- 心跳检测
- 游戏技能冷却
- 倒计时
- 其他需要超时机制的需求
使用方法
- 单线程定时器:定时器检测放在主线程里(可能会存在响应不及时的情况)。
- 多线程定时器:定时器检测放在另外一个线程里。
红黑树实现
缺陷
时间复杂度较高,不适合在多线程环境下使用
最小堆实现
缺陷
时间复杂度较高,不适合在多线程环境下使用
时间轮实现
单层级时间轮
数据结构组织与工作原理
单数组 + 多链表,将定时任务存储在过期时间对于的数组下标的链表中。
时间每过一个单位(取决于时间精度),时间指针在数组上右移一格,并取出移动后格子的所有定时任务(表示当前时间戳的所有任务到期了)并执行对应的定时任务函数。
关键参数
- 时间轮大小:设置为满足 “ 2 ^ n > 所有任务中最大过期时间 ” 条件的2 ^ n。
- 时间精度:根据实际需求确定。
缺陷及其解决方法
缺陷:(1)时间轮太大或精度太高会导致“空推进”。(2)时间轮过小会导致无效检测。
解决方法:(1)使用最小堆 (2)采用多层级时间轮
多层级时间轮
数据结构组织
多个数组(取决于层级数量) + 多个链表
时间进位与重新映射的规则
死锁检测组件
见代码
内存泄漏检测组件
未学习
无锁消息队列
未学习