Skip to content

manjusry/ltimer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ltimer: Linux下的高精度海量定时器实现

特性介绍

1.利用epoll机制和timerfd特性实现的多重、多用定时器;
2.可实现海量定时任务,定时精度可达纳秒级别,同一时间点可添加不同的任务;

适用场景

海量连接超时处理,流表老化。

设计思路

1.定时器桶采用预分配内存,创建时需要指定桶的容量.
2.定时器桶内的定时器用升序链表串起来,链表头部总是最近会超时的定时器.
3.每个定时器桶有一个工作线程,工作线程以固定频率触发,更新当前时间,并检查桶内是否有已超时的定时器,有则处理.
4.定时器桶的工作线程监听的pipe读端有定时器的增删改事件可读,读取出来并处理.
5.定时器超时,调用超时处理函数处理,完成后摘链,放到回收链表或者重新设置超时时间插入到活动链表合适位置.

使用方法

1.克隆代码,编译生成libltimer.so库文件;
2.拷贝头文件ltimer.h和库文件libltimer.so到项目中;
3.编码使用参考测试用例;

注意事项

1.定时器的超时任务要求效率高,否则会导致系统性能抖动;
2.定时器精度需要根据使用场景选择,过高的精度会导致CPU使用率高;

TODO

1.完善错误提示码,方便定位问题;
2.添加测试用例;
3.目前使用链表管理定时器,后面根据需要改为时间轮.