基于libco的c++协程实现5(时间轮定时器)

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

在后端的开发中,定时器有很广泛的应用。

比如:
⼼跳检测
倒计时
游戏开发的技能冷却
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;				// 后
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值