在C++中,我们可以使用chrono
库来处理时间。我认为它与CPU时钟异步。我的意思是,chrono::seconds(1)
是真实的 1 秒,与在此期间执行的指令数量无关。我对吗?
如果我是对的,它在低级别是如何工作的?在一般的现代计算机体系结构中是否有定时器硬件与CPU时钟异步工作?
最佳答案
典型的现代计算机有两种方式来显示时间,这两种方式在幕后相互帮助。
通常有 Time Stamp Counter它只不过是一个特殊的寄存器,它随着每个时钟周期而递增。计算机还知道自己的循环时间,因此可以将循环计数转换为物理持续时间,例如纳秒。这最终是操作系统提供“实时时钟”时使用的,在 C++11 和更高版本中称为
std::chrono::steady_clock
。此外,现代计算机理解并参与Network Time Protocol 。这本质上是一台计算机向另一台计算机询问当前 UTC 时间的一种有组织的方式。计算机可以使用它来找出当前时间,然后使用其本地 Time Stamp Counter稍后将其转换为 UTC 时间。计算机可以使用NTP每天多次,以保持本地时间准确。在 C++11 及更高版本中,这是通过
std::chrono::system_clock
访问的。
几十年前,个人电脑没有参与NTP ,而是询问启动计算机的人员当前时间和日期,然后使用其板载 TSC以保持本地时间。
更新
请阅读Peter Cordes下面的评论了解我掩盖的细节。
关于c++ - chrono库的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46624018/