低精度定时器(也称为时间轮定时器)是Linux内核中用于管理相对时间较短的定时请求的机制,精度通常在毫秒级别。
struct timer_list {
struct list_head entry;
unsigned long expires;
void (*function)(unsigned long);
unsigned long data;
struct tvec_base *base;
// ...
};
(示意图)
TVR (Timer Vector Root)
TV1-TV4 (Timer Vector 1-4)
添加定时器
void add_timer(struct timer_list *timer);
定时器到期处理
run_timer_softirq()
级联迁移
O(1)时间复杂度
适合短时定时器
低内存开销
#include <linux/module.h>
#include <linux/timer.h>
static struct timer_list my_timer;
void my_timer_callback(unsigned long data) {
printk("Timer callback executed\n");
/* 重新激活定时器 */
mod_timer(&my_timer, jiffies + msecs_to_jiffies(2000));
}
static int __init my_init(void) {
setup_timer(&my_timer, my_timer_callback, 0);
mod_timer(&my_timer, jiffies + msecs_to_jiffies(2000));
return 0;
}
static void __exit my_exit(void) {
del_timer(&my_timer);
}
module_init(my_init);
module_exit(my_exit);
特性 | 低精度定时器 | 高精度定时器 |
---|---|---|
精度 | 毫秒级(1ms+) | 纳秒级 |
实现机制 | 时间轮 | 红黑树 |
适用场景 | 短时、大量定时器 | 精确时间要求的定时器 |
CPU开销 | 低 | 较高 |
低精度定时器通过巧妙的多级时间轮设计,在保持O(1)时间复杂度的同时,能够高效处理大量短时定时器请求,是Linux内核定时子系统的核心组件之一。