为什么需要高性能定时器(适用场景)?
- 最近在整理事件驱动框架,事件类型中需要一些定时事件。
- 比如:心跳事件、数据包超时重传事件、定时检查事件等等
方案选型:
1.借助系统能力。比如在Linux中,可以通过SIGALARM信号进行实现。显然,(1)开销太大了;(2)完全依赖于操作系统,无法进行管理;(3)SIGALARM信号最小粒度为秒级,粒度太大了,满足不了我们的需求。
2.应用层开启单独线程+Sleep进行计时。确实实现起来简单,问题也很显然:性能开销大。
3.基于升序链表。可以实现,当然问题也很明显:链表的插入效率较低,而且遍历超时事件时,需要遍历很长的链表,效率低,自然开销大。
4.基于最小堆。对比下来,满足需求,且性能OK。插入:O(logn);删除:O(1);查找:O(1)