定时器:管理大量延时任务的模块,异步任务
addTimer(1000, func);
addTimer(1000, func);
addTimer(1000, func);
addTimer(1000, func);
数据结构: 有序结构, 增删改后仍然有序
最近要被触发的定时任务
可用:set/map/multiset/multiset/
跳表skiplist
时间轮
触发机制: 不要占用线程或者系统性能(sleep)
任务如何组织?
C语言:
struct TimerNode {
time_t expire;//not unique
callback func;
void* ctx;//args
};
C++11:
struct TimerNode {
time_t expire;//not unique
uint64_t id;//用于set数据结构
using callback = std::function<void(const TimerNode&)>;
callback func;
};
优化
=====》
struct TimerNodeBase {
time_t expire;//not unique
uint64_t id;//用于set数据结
};
struct TimerNode : public TimerNodeBase {
callback func;//函数对象,拷贝成本高,所以通过继承现剥离
TimerNode(int times, int i, callback f) : expire:(times), func(f) , id(i) {}
};
-===》 s

文章介绍了一个使用C++11实现的定时器模块,该模块基于有序数据结构(如set)和事件驱动(epoll)来管理并触发延时任务。它利用时间轮概念,确保在不占用主线程资源的情况下处理定时事件。通过定义TimerNode结构体存储任务信息,并使用自定义比较运算符保证数据结构内的排序,从而实现高效的查找和删除操作。
最低0.47元/天 解锁文章
2万+

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



