在后端的开发中,定时器有很广泛的应用。
比如:
⼼跳检测
倒计时
游戏开发的技能冷却
redis的键值的有效期等等,都会使用到定时器。
定时器的实现数据结构选择
红⿊树
对于增删查,时间复杂度为O(logn),对于红⿊树最⼩节点为最左侧节点,时间复杂度O(logn)
最⼩堆
对于增查,时间复杂度为O(logn),对于删时间复杂度为O(n),但是可以通过辅助数据结构(
map
或者hashtable来快速索引节点)来加快删除操作;对于最⼩节点为根节点,时间复杂度为O(1)
跳表
对于增删查,时间复杂度为O(logn),对于跳表最⼩节点为最左侧节点,时间复杂度为O(1),但是空间复杂度⽐较⾼,为O(1.5n)
时间轮
对于增删查,时间复杂度为O(1),查找最⼩节点也为O(1)
libco的使用了时间轮的实现
首先,时间轮有几个结构,必须理清他们的关系。
struct stTimeoutItem_t
{
enum { eMaxTimeout = 40 * 1000 }; // 40s
stTimeoutItem_t* pPrev; // 前
stTimeoutItem_t* pNext; // 后

本文详细探讨了后端开发中如何利用时间轮数据结构进行定时任务管理,包括红⿊树、最⼩堆和跳表的优缺点,并重点讲解了libco库中时间轮的实现,如stTimeoutItem_t结构和stCoEpoll_t的设计。
最低0.47元/天 解锁文章
3171

被折叠的 条评论
为什么被折叠?



