跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 定时任务追溯到最底层都是”轮询”实现的吗
未分類
29 3 月 2020

定时任务追溯到最底层都是”轮询”实现的吗

定时任务追溯到最底层都是”轮询”实现的吗

資深大佬 : Sunkz 26

不停地判断?????
if(currTime==givenTime){
}
大佬有話說 (23)

  • 主 資深大佬 : Sunkz

    用小顶堆维护任务下次执行时间, 每次 sleep 距离执行堆顶任务的时间就行了

  • 資深大佬 : cissoid

    考虑机器启停,或者定时任务触发器被挂起暂停这种情况,我觉得轮询是最优的办法了,具体优化细节就是开几个轮询器、每次轮询间隔以及如何触发

  • 資深大佬 : Hstar

    不一定啊,可以基于时钟。

  • 資深大佬 : fancy111

    如果你没有使用轮询而能获知了一个事件发生,是因为有别人在你看不到的地方帮你做了轮询。

    比如 cpu 中断。

  • 資深大佬 : Mohanson

    这样说也没毛病

  • 資深大佬 : whypool

    linux 下,使用 timerfd_* 系列函数,把时间变成文件描述符,这样可以很好的与 select/poll/epoll 结合在一起。

  • 資深大佬 : Morge

    哪有什么岁月静好,不过是有人替你不断轮询。

  • 資深大佬 : dallaslu

    目前发现都是这样的

  • 資深大佬 : nl101531

    算出下一个要执行的任务,一觉 sleep 到那个时间点就好了

  • 資深大佬 : tigerstudent

    如果真的深入到最低层,那应该是定时器才对,先设置一下定时器的初始数值,然后使能定时器,定时时间到了就通过中断通知 cpu,然后 cpu 去执行定时任务

  • 資深大佬 : printese

    说一定要轮询的都没学过电路吧

  • 資深大佬 : billlee

    @tigerstudent
    @printese
    关键是怎么知道时间到了呢, 如果不循环判断当前时间是否等于指定时间, 怎么才能知道到时间了呢

  • 主 資深大佬 : Sunkz

    硬件定时器不是轮询哦,脉冲计数即可。

  • 資深大佬 : tairan2006

    定时中断

  • 資深大佬 : Ediacaran

    @Sunkz 有硬件电路可以实现,各种定时器触发器等

  • 資深大佬 : ZZSZZSZZS

    从逻辑上来说硬件定时器也是哪当前时间和指定时间做比较来实现的,当硬件计时器计到指定时间之后就会触发 cpu 的中断从而告诉 cpu 时间到了。由于有专用硬件处理定时任务,所以不会占用 cpu 时间。当然你也可以理解为定时器通过轮询实现的。

  • 資深大佬 : ZZSZZSZZS

    就是不知道定时器是否会因 CPU 的长时间高负载而不准确,不可靠,所以就自己去轮询了…

  • 資深大佬 : dremy

    @dremy 硬件定时器工作时序不是由晶振决定的吗

  • 資深大佬 : lzyliangzheyu

    @Sunkz 定时器寄存器溢出触发

  • 資深大佬 : lzyliangzheyu

    @dremy 不会,这是有硬件专门完成的,定时器其实就是脉冲计数器,用来计数的脉冲由 rc 振荡器或者更高精度的晶体振荡器产生,这些东西产生的脉冲频率都是恒定的,和 cpu 负载没有关系,而且一般还有 PLL 锁相环 FLL 锁频环电路等进一步修正频率

  • 資深大佬 : ZZSZZSZZS

    @Sunkz 模电有一章专门说这个

  • 資深大佬 : aguesuka

    数电里的 jk 触发器加上一个电容就是最简单的定时器

  • 資深大佬 : aguesuka

    已经歪了,从软件歪到了底层硬件电路…

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具