关于定时器 Timer 与超时 timeout, 操作系统是如何实现的

2021-09-10 18:10:55 +08:00
 iXingo

想了解一些底层的细节

1587 次点击
所在节点    程序员
8 条回复
byaiu
2021-09-10 18:12:26 +08:00
关键词 timer wheel
高精度另说
iXingo
2021-09-10 18:44:02 +08:00
@byaiu log when
iXingo
2021-09-10 18:44:14 +08:00
@byaiu 老哥稳
ToPoGE
2021-09-11 00:32:59 +08:00
以前搞过单片机,定时器是靠晶振震荡周期来实现,不同晶振震荡周期不同,一切的上层应用都是基于这个
jedihy
2021-09-11 05:45:25 +08:00
时钟中断会定时触发,然后操作系统就可以利用这个中断实现定时器的逻辑。用户态的 timer 实现多种多样,没有仔细研究过。
jedihy
2021-09-11 06:00:40 +08:00
windows 里面的 WaitForSingleObject,大致是把当前线程状态切换为 waiting,然后交给 scheduler 并告知一个 deadline,然后 scheduler 就可以调度其他线程直到 deadline 到期,把这个等待的线程切换为 running 。
yolee599
2021-09-11 13:32:53 +08:00
硬件定时器数量非常有限(一般不超过 5 个),通常是使用一个硬件定时器,设定一个固定的中断周期,比如 1 毫秒。操作系统再实现软件定时器,把所有软件定时器放在一个升序链表中,每次硬件定时器中断来了的时候就检查软件定时器链表中有没有过期的定时器,有就调用这个软件的回调通知应用。软件定时器精度就是硬件定时器的周期
iXingo
2021-09-13 21:46:56 +08:00
谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/801116

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX