低精度定时器的使用

2016-08-03 ruki 更多博文 » 博客 » GitHub »

tbox 定时器 时间轮算法

原文链接 https://waruqi.github.io/2016/08/03/low-precision-timer.cn/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


tbox提供了两种定时器:

一种是基于最小堆的高精度定时器,精确到ms级别,但是时间复杂度在O(logn)

还有一种就是基于timing-wheel时间轮算法的低精度定时器,时间复杂度仅为O(1),实常数级别的,相当的快。

这个定时器是参考了linux内核的timer算法实现,不过linux那个比较通用,实现复杂,tbox中为了考虑精简性和低资源,对其算法做了精简

使得其资源占用更小,效率更高,但是使用场景上会有些限制,可以根据自己的实际情况,来判断使用需要用这个定时器来优化性能,还是使用高精度版本。

ltimer低精度定时器,提供了几种精度模式:

  • TB_LTIMER_TICK_100MS:100毫秒级别
  • TB_LTIMER_TICK_S:秒级别
  • TB_LTIMER_TICK_M:分钟级别
  • TB_LTIMER_TICK_H:小时级别

ltimer考虑到资源问题,同时只能使用一种精度级别,不能够像linux的timer那么通用,但实现更加简单了。。

一般情况下,使用秒级别就够了,使用场景可以是:

  • 针对服务器中socket超时定时器的管理和优化,这种精度不会太高,使用秒级别超时就ok了,但是在高并发下性能提升却很明显
  • 针对一些精度要求不高的定时器场合,尤其是每秒钟一次的地方

具体使用其实跟timer差不多,只要接口换成ltimer就行了,具体可参考:高精度定时器的使用

两者的api是类似的,这里就不细说了。