Linux定时器

reference
https://www.ibm.com/developerworks/cn/linux/l-cn-timers/
https://www.cnblogs.com/zhanggaofeng/p/9410639.html

定时器是各类开源项目中很重要的一个组件,可用于定时执行一些更新、清理等任务。本文介绍两种定时器的实现方式优先队列TimingWheel
首先我们从定时器的使用上来看如何实现一个定时器。一般我们会用到三种接口
run_at(timestamp, call_back, args)
run_after(timout, call_back, args)
run_every(interval, call_back, args)
其中run_after与run_at是一回事,只会运行call_back一次,而run_every则是周期性的运行call_back。

优先队列实现定时器

我们把用户的输入包装成一个定时任务作为优先的一个节点,优先队列的对头保存超时最近的节点。还需要有一个线程定时的去查看该队列的队头任务是否到期,如果到期就执行任务,注意任务的执行线程。实现大体如下:

int timerfd = timerfd_create();
timerfd_settime(interval);
epoll_ctr(...)
loop {
  epoll_wait()
  if (queue.top().time <= current_time) {
    task = queue.pop();
    task();
    if (task.interval) {
      queue.push(task(new_time))
    }
  }
}

TimingWheel

https://blog.csdn.net/mindfloating/article/details/8033340

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值