0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux 编程之经典多级时间轮定时器(下)

jf_78858299 来源:CSDN 作者:叨陪鲤 2023-04-21 14:45 次阅读

2.3 时间轮代码: timewheel.c

/*
 *毫秒定时器  采用多级时间轮方式  借鉴linux内核中的实现
 *支持的范围为1 ~  2^32 毫秒(大约有49天)
 *若设置的定时器超过最大值 则按最大值设置定时器
 **/
#include 
#include 
#include 
#include 
#include 
#include 
#include "list.h"
#include "log.h" 
#define TVN_BITS   6
#define TVR_BITS   8
#define TVN_SIZE   (1<

2.4 编译运行

peng@ubuntu:/mnt/hgfs/timer/4. timerwheel/2. 多级时间轮$ ls
a.out  list.h  log.h  mutiTimeWheel.c
toney@ubantu:/mnt/hgfs/timer录/4. timerwheel/2. 多级时间轮$ gcc mutiTimeWheel.c -lpthread
toney@ubantu:/mnt/hgfs/timer/4. timerwheel/2. 多级时间轮$ ./a.out 
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100
[#DEBUG: Toeny Sun: mytimer:370]:100

从结果可以看出:如果添加的定时任务是比较耗时的操作,那么后续的任务也会被阻塞,可能一直到超时,甚至一直阻塞下去,这个取决于当前任务是否耗时。

这个理论上是绝不能接受的:一个任务不应该也不能去影响其他的任务吧。但是目前没有对此问题进行改进和完善,以后有机会再继续完善吧。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206738
  • C语言
    +关注

    关注

    180

    文章

    7533

    浏览量

    128787
  • 定时器
    +关注

    关注

    23

    文章

    3148

    浏览量

    112043
收藏 人收藏

    评论

    相关推荐

    Linux驱动开发-内核定时器

    内核定时器是内核用来控制在未来某个时间点(基于jiffies(节拍总数))调度执行某个函数的一种机制,相关函数位于 和 kernel/timer.c 文件
    的头像 发表于 09-17 15:06 1215次阅读

    Linux编程之经典多级时间定时器(C语言版)

    上图是5个时间轮级联的效果图。中间的大轮是工作轮,只有在它上的任务才会被执行;其他轮上的任务时间到后迁移到下一级轮上,他们最终都会迁移到工作轮上而被调度执行。
    发表于 11-08 14:06 694次阅读

    芯灵思SinlinxA33开发板Linux内核定时器编程

    Linux 内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于和 kernel/timer.c 文件中。内核定时器的数据结构struc
    发表于 02-14 14:55

    定时器时间计算

    看了ti的技术文档,发现计算定时器定时时间计算上有点疑问。例如定时器1工作在关联32位模式定时时间。创龙视频资料中:
    发表于 07-08 17:05

    Linux内核定时器的相关资料分享

    文章目录Linux内核定时器概念Linux内核定时器基础知识Linux内核定时器相关函数
    发表于 12-20 08:05

    时间管理和定时器编程基本知识汇总

    Linux系统编程第08期:时间管理和定时器编程 6年嵌入式开发经验,在多家...
    发表于 12-23 08:32

    CHMOS可编程时间间隔定时器芯片82C54

    82C54是专为Intel系列微处理机而设计的一种可编程时间间隔定时器/计数器,它是一种通用芯片,在系统软件中可以把多级定时元素当成输入/输
    发表于 06-12 22:13 84次下载

    时间定时器I

    时间定时器I
    发表于 04-03 09:40 933次阅读
    长<b class='flag-5'>时间</b><b class='flag-5'>定时器</b>I

    Linux下一种高性能定时器池的实现

    提出Linux用户空间下的一种高性能定时器池的实现方法。主要基于时间轮、红黑树及Linux内核提供了一种利于管理的定时器句柄Timerfd。
    发表于 09-25 14:57 25次下载

    JAVA教程之定时器的使用

    JAVA教程之定时器的使用,很好的JAVA的资料,快来下载吧。
    发表于 04-13 11:41 14次下载

    编程控制器实验教程之定时器指令实验

    编程控制器实验教程之定时器指令实验,很好的学习资料。
    发表于 04-19 13:45 0次下载

    单片机教程之定时器和计数器原理及应用

      本文档的主要内容详细介绍的是单片机教程之定时器和计数器原理及应用主要内容包括了:定时器、计数器原理,Mega8定时器计数器资源,相关寄存器,代码例程
    发表于 01-14 17:20 4次下载
    单片机教<b class='flag-5'>程之</b><b class='flag-5'>定时器</b>和计数器原理及应用

    定时器开关怎么设置时间

    定时器开关:又称定时器定时开关、时间定时器开关等,是一种控制用电器定时自动开启、关闭的电气装置
    的头像 发表于 09-08 15:32 3.1w次阅读
    <b class='flag-5'>定时器</b>开关怎么设置<b class='flag-5'>时间</b>

    Linux内核定时器

    Linux内核中,也可以通过定时器来完成定时功能。但和单片机不同的是,Linux内核定时器是一种基于未来
    的头像 发表于 09-22 08:56 1425次阅读
    <b class='flag-5'>Linux</b>内核<b class='flag-5'>定时器</b>

    Linux 编程之经典多级时间定时器(上)

    多级时间轮的原理也容易理解:就拿时钟做说明,秒针转动一圈分针转动一格;分针转动一圈时针转动一格;同理时间轮也是如此:当低级轮转动一圈时,高一级轮转动一格,同时会将高一级轮上的任务重新分配到低级轮上。从而实现了
    的头像 发表于 04-21 14:45 462次阅读
    <b class='flag-5'>Linux</b> <b class='flag-5'>编程之</b><b class='flag-5'>经典</b><b class='flag-5'>多级</b><b class='flag-5'>时间</b>轮<b class='flag-5'>定时器</b>(上)