2

我最近一直在阅读有关高分辨率和低分辨率计时器的内容,但我不太了解。他们是如何运作的?它们不是都通过检查计算机硬件上的内部系统时钟来运行吗?如果是这种情况,是否意味着更高分辨率的人只是更频繁地检查它,消耗更多资源?

我使用低分辨率计时器有什么问题吗?当该计时器到期时,在高分辨率计时器应该停止的一秒(或更早)内启动高分辨率计时器?还是由于某种原因这不起作用?

与低分辨率计时器相比,高分辨率计时器消耗的资源大约是多少?

4

1 回答 1

3

通常,低分辨率计时器将每隔 x 时间(例如,每 1、5、10、16.6667、17.81291 或 20 毫秒 - 例如,它可能有许多其他值)向处理器触发一次中断。当任务运行“太长时间”以及维护当前时间、“超时”等待事件以及诸如此类的事情(例如,sleep类型函数调用将自己设置为“超时”时,操作系统使用它来切换任务“在睡眠时间结束时)。

高分辨率定时器通常是一个硬件寄存器,它以高 KHz 或更高的频率(例如 32768Hz、36KHz、12MHz、2.2GHz - 这些只是一些示例,可能几乎任何事物)。通常,这是通过“读取当前值”来使用的,并且无论当前计数是多少,您都会得到。

这将提供高分辨率的计时值,这对于测量短时间间隔很有用(例如,用于基准测试或计算其他服务器响应 ping 所需的时间或其他一些少量时间),但你不能真的使用高分辨率计时器“等待 600 毫秒” - 至少在不读取所述计时器无数次的情况下并非如此,因为您不能(在我在这里描述的典型情况下)说“告诉操作系统以 X 号再次启动此任务计数”。

(但是,有时高分辨率计时器与低分辨率计时器只是相同的硬件,只是以不同的方式使用 - 我上面描述的差异仍然是相关的,无论是一个或多个单元提供不同类型的计时)。

还要记住,如果你想要“精确计时”,操作系统需要很好地配合。大多数现代操作系统的“不喜欢”任务只是坐在那里并消耗 CPU 时间(例如,“我们还在那里”类型的计时器轮询),因此会给其他运行时偏好较短的任务。这意味着如果您有高精度的时序要求,操作系统需要帮助您,而不是在任务到达正确的时间步时停止运行。在不确切知道您要做什么的情况下,很难确定在您的情况下正确的解决方案是什么。

于 2013-06-21T13:23:49.463 回答