定时器_c++定时器管理

本文探讨了在C++中管理大量定时器的优化方法,包括使用红黑树、最小堆和时间轮。通过引入这些数据结构,可以提高定时器的查找、插入和删除效率。红黑树提供了平衡查找树的优势,最小堆简化了实现,而时间轮则通过闭地址HASH优化查找速度。文章还提到了STL中的`priority_queue`以及如何自定义比较函数实现最小堆。
摘要由CSDN通过智能技术生成

在上篇中提了定时器的两种实现的思路,同时也提到了一个问题,就是当一个进程需要使用大量定时器时,需要利用时间轮、最小堆或红黑树等结构来管理定时器。为什么要这样呢?我们先回顾下上篇的观点,上篇中提到定时器比较常见的有两种,一种是cron like,另外一种是周期性执行的定时器,但是对于cron like的定时器而言,如果要性能好,一般要每个定时器一个线程,或者是要借用另外一个周期执行的定时器来做触发源,用一个数据结构,如链表,把所有cron like的定时器串起来,然后在每个周期,如1秒一次,去扫描这个链表,去判断是否有定时器能够被触发。这种做法在定时器比较少时固然问题不大,但是如果定时器多起来的话,整个过程的性能就不那么的好了,所以,我们需要有一个比较链表更好的数据结构来管理我们的定时器。对于定时器管理这个场景中,用链表的查找慢的原因主要是因为定时器在链表中是无序保存的,所以只能够遍历整个链表,那要改进的话,就必须解决一个问题,就是怎样把这些定时器变得有序。这个问题最简单的解法,就是预先计算出这些定时下次被触发的时间点,然后根据这个时间点由小到大排序就行了,但是如果还是沿用链表,每个有节点要增加或者移除,性能都不会太好,所以,我们必须引入更好的数据结构来管理这些定时器。下面说下笔者认为比较常见的思路吧。

1、红黑树

对于改进链表的查找性能,最直接也是最常见的思路,就是使用二分搜索树。但是由于定时器执行的时间点是一直在变化的,也就是说,如果这棵二分查找树的根节点不变的情况下,二分查找树会变得很不平衡,因此,使用能够自动调节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值