c++ - chrono库的实现

标签 c++ time cpu-architecture

在C++中,我们可以使用chrono库来处理时间。我认为它与CPU时钟异步。我的意思是,chrono::seconds(1) 是真实的 1 秒,与在此期间执行的指令数量无关。我对吗?

如果我是对的,它在低级别是如何工作的?在一般的现代计算机体系结构中是否有定时器硬件与CPU时钟异步工作?

最佳答案

典型的现代计算机有两种方式来显示时间,这两种方式在幕后相互帮助。

  1. 通常有 Time Stamp Counter它只不过是一个特殊的寄存器,它随着每个时钟周期而递增。计算机还知道自己的循环时间,因此可以将循环计数转换为物理持续时间,例如纳秒。这最终是操作系统提供“实时时钟”时使用的,在 C++11 和更高版本中称为 std::chrono::steady_clock

  2. 此外,现代计算机理解并参与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/

相关文章:

assembly - func在R格式指令集中意味着什么?

memory - 32 位和 64 位架构上的寻址

C++:转发参数包和 std::tuple/array 的总和

javascript - 使用JS更改没有id的输入值

c++ - 构造函数中的错误 : no instance of overloaded function, (C++)

node.js - 如何使用 SailsJS v0.11.3 在 MongoDB 中存储时间值?

c# - 为什么按增量时间计算?

algorithm - Tomasulo 算法 + MIPS 5 级流水线 + 分支预测

c++ - 二叉树中的最小路径和

c++ - 基于 ZeroMQ session 的请求分派(dispatch)或条件路由