支持周期性任务的时间轮定时器
More...
#include <timing_wheel.hpp>
支持周期性任务的时间轮定时器
时间轮是一种高效的定时器实现,将时间划分为固定数量的槽位, 每个槽位存储在该时刻到期的任务列表。
- 特性
- O(1) 时间复杂度添加任务
- 支持一次性任务和周期性任务
- 支持取消任务
- 线程安全
- 工作原理
- 时间轮由 N 个槽位组成,每个槽位代表一个时间间隔
- 指针每次 tick() 前进一格,执行当前槽位的到期任务
- 对于延迟超过一圈的任务,使用 remaining_laps 记录剩余圈数
- 使用示例
auto id = wheel.add_task(5000, []() { std::cout << "Timeout!" << std::endl; });
wheel.add_periodic_task(30000, []() { send_heartbeat(); });
wheel.cancel_task(id);
reactor.add_timer(1000, [&wheel](int) { wheel.tick(); });
支持周期性任务的时间轮定时器
Definition timing_wheel.hpp:67
◆ TimingWheel()
| fix40::TimingWheel::TimingWheel |
( |
int |
wheel_size, |
|
|
int |
tick_interval_ms |
|
) |
| |
|
inline |
◆ add_periodic_task()
添加周期性任务
- Parameters
-
| interval_ms | 执行间隔(毫秒),必须大于 0 且不超过 MAX_SAFE_DELAY_MS |
| task | 任务回调函数 |
- Returns
- TimerTaskId 任务 ID,可用于取消任务;失败返回 INVALID_TIMER_ID
- Note
- 任务将每隔 interval_ms 毫秒执行一次,直到被取消
◆ add_task()
添加一次性任务
- Parameters
-
| delay_ms | 延迟时间(毫秒),必须大于 0 且不超过 MAX_SAFE_DELAY_MS |
| task | 任务回调函数 |
- Returns
- TimerTaskId 任务 ID,可用于取消任务;失败返回 INVALID_TIMER_ID
- Note
- 任务将在约 delay_ms 毫秒后执行一次,然后自动移除
◆ cancel_task()
取消任务
- Parameters
-
标记任务为已取消状态,任务将在下次 tick() 时被清理。 如果 id 为 INVALID_TIMER_ID 或任务不存在,则无操作。
◆ tick()
| void fix40::TimingWheel::tick |
( |
| ) |
|
|
inline |
时间轮前进一格,执行到期任务
该方法应由外部定时器周期性调用,调用间隔应等于 tick_interval_ms。
- 执行流程
- 指针前进一格
- 遍历当前槽位的任务列表
- 跳过已取消的任务
- 对于 remaining_laps > 0 的任务,减少圈数
- 执行到期任务
- 周期性任务重新调度到下一周期
- Note
- 任务回调在锁外执行,避免死锁
The documentation for this class was generated from the following file: