-
-
Notifications
You must be signed in to change notification settings - Fork 725
低精度定时器的使用
ruki edited this page Dec 25, 2015
·
2 revisions
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是类似的,这里就不细说了。