摘要
介绍
描述:
机器一直定时发生时钟中断,改变内核的信号或描述符,通过捕捉内核某种机制的变化来执行心跳函数tick,tick中实现检测所有超时定时器,并执行其的超时动作即回调函数
图示
核心实现思路
- 如何捕获超时事件?
- 轮询,隔多久就去查看是否发生信号或描述符变化
- 通知,信号或描述符发生变化后通知定时器执行回调函数
如何设计定时器容器和定时器(配套)?
超时时间(到期时间):绝对时间、相对时间,多数是绝对时间
- 超时回调函数+回调参数
- (可选)重置定时器
定时器容器
用来组织管理定时器
功能:
- 初始化(构造函数)
- 销毁(析构函数),删除容器中所有定时器(delete内存)——最好放在定时器类中new和delete对应
- 注册,即添加定时器(在外部定时器类后再添加,而不是在内部构建一个定时器类,new)
- 注销,即删除定时器(删除定时器类时会自动析构,delete)
- (可选)调整,即根据超时时间来调整定时器在容器中的位置
- Tick(),即超时处理函数,处理所有超时定时器回调函数并删除该定时器——每个一段时间就会执行一次
如何选择容器来提高添加、删除、执行的效率
最小堆定时器
时间轮定时器
红黑树定时器
跳表定时器
参考
- https://blog.csdn.net/thisinnocence/article/details/81073117?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control
- 定时器的实现: 1.跳表 2.红黑树 3.时间轮_弄懂基本原理+良好代码功底=无敌-CSDN博客
- nginx 定时器实现详解_huzilinitachi的专栏-CSDN博客