- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在计时功能中,time
, clock
getrusage
, clock_gettime
, gettimeofday
和 timespec_get
,我想清楚地了解它们是如何实现的以及它们的返回值是什么,以便知道我必须在哪种情况下使用它们。
首先我们需要对返回 的函数进行分类挂钟值 与返回 的函数进行比较进程或线程值 . gettimeofday
返回挂钟值,clock_gettime
返回挂钟值 或 进程或线程值取决于 Clock
传递给它的参数。 getrusage
和 clock
返回过程值。
然后第二个问题是关于这些功能的实现,因此,它们的准确性。这些功能使用哪种硬件或软件机制。
看来getrusage
仅使用内核滴答(通常为 1 毫秒长),因此不会比 ms 更准确。对吗?
然后是getimeofday
函数似乎使用了可用的最准确的底层硬件。因此,在最近的硬件上,它的精度通常是微秒(由于 API 的缘故,不能更多)。
怎么样clock
,手册页谈到“近似”,它是什么意思?
怎么样clock_gettime
,API 以纳秒为单位,是否意味着如果底层硬件允许它能够如此准确?单调性怎么样?
还有其他功能吗?
最佳答案
问题是在 C 和 C++ 中有几种不同的时间函数可用,其中一些在实现之间的行为有所不同。也有很多半信半疑的答案。编译时钟函数列表及其属性将正确回答问题。首先,让我们问一下我们正在寻找的相关属性是什么。看了你的帖子,我建议:
time()
从操作系统返回挂钟时间,精度以秒为单位。 clock()
似乎返回用户和系统时间的总和。它存在于 C89 及更高版本中。曾经这应该是 CPU 周期时间,但现代标准 like POSIX要求 CLOCKS_PER_SEC 为 1000000,最大可能精度为 1 µs。我的系统的精度确实是 1 µs。这个时钟一旦达到顶峰就会回绕(这通常发生在 ~2^32 个滴答之后,这对于 1 MHz 时钟来说不是很长)。 man clock
说从 glibc 2.18 开始,它是用 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ...)
实现的在 Linux 中。 clock_gettime(CLOCK_MONOTONIC, ...)
提供纳秒分辨率,是单调的。我相信“秒”和“纳秒”是分开存储的,每个都在 32 位计数器中。因此,在几十年的正常运行后,任何回绕都会发生。这看起来是一个非常好的时钟,但不幸的是,它在 OS X 上尚不可用。POSIX 7 describes CLOCK_MONOTONIC
as an optional extension . getrusage()
原来是我的情况的最佳选择。它分别报告用户和系统时间并且不回绕。我的系统上的精度是 1 µs,但我也在 Linux 系统(Red Hat 4.1.2-48 with GCC 4.1.2)上测试了它,精度只有 1 ms。 gettimeofday()
以(名义上)μs 精度返回挂钟时间。在我的系统上,这个时钟似乎有 µs 精度,但这不能保证,因为 "the resolution of the system clock is hardware dependent" . POSIX.1-2008 says that . “应用程序应该使用 clock_gettime()
函数而不是过时的 gettimeofday()
函数”,所以你应该远离它。 Linux x86 并实现它 as a system call . mach_absolute_time()
是 OS X 上非常高分辨率 (ns) 计时的一个选项。在我的系统上,这确实提供了 ns 分辨率。原则上,这个时钟环绕,但是它使用 64 位无符号整数存储 ns,因此环绕在实践中不应该是一个问题。便携性值得怀疑。 clock_gettime
已于 10.12 (Sierra) 实现。此外,基于 POSIX 和 BSD 的平台(如 OS X)共享
rusage.ru_utime
结构域。
关于c - 在 Linux 中测量时间 - 时间 vs 时钟 vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12392278/
我的代码如下所示: #include #include #include int main(void) { time_t loop_begin, loop_end, scanf_begi
我正在尝试制作一个游戏时钟,其中每个游戏小时都是 3 个实时分钟。但是由于某种原因,我很难将头环绕在它周围。 我想出了这个半工作位,每小时循环 3 分钟,所以它只显示完整的“游戏时间”,我在 23 以
很难找到解决方法的地方。我希望制作一个时钟,它是一个幻想时区,并且是根据系统时间计算的(因为当您不在网页上时,它需要继续运行)。 白天持续从早上7:00到晚上9:59,这是实时200分钟。 13秒(实
Template.display_time.time = function() { var date = new Date(); var hour = date.getHours();
我想做一个小测试,以测试我在远离 javascript 太久之后的技能。试图成为真正的cwleaver并创建一个时钟对象,听起来很简单。我成功地创建了时钟等,没有遇到任何问题,但在大约 20 分钟后运
我正在学习 Javascript30.com 类(class),我们必须做一个带有秒、分和小时的 JS 时钟。这是代码: 还有 J
我有一个 Android 应用程序,用户按下开始按钮并启动一些收集数据的功能。我有一个自定义的 EditText,它显示所有这些过程所花费的时间,并且每秒更新一次,直到用户按下停止键。我使用如下所示的
我正在尝试模拟实时数据流,以测试不断过滤和计算数据点的程序。主要是我需要确保它能满足时间要求。 每 50 毫秒就会有一个新的数据点需要计算。 所以我想创建一个 java 时钟,它独立于当前在 jvm
我正在抓狂:我的 Javascript 时钟不工作。我正在使用 Firebug 来查找错误,但没有得到任何输出。 图像文件位于子文件夹 Dual_Months 和 Dual_Numbers 中。我在我
我计划构建多个计时器。我首先使用以下代码构建一个简单的时钟。 问题是,时钟将运行几分钟,网站就会崩溃,我认为这是由于内存不足。 当我console.log输出时。该命令似乎每秒运行多次。 consol
我是新来的,所以如果您对我的问题或“礼仪”有任何不妥之处,请告诉我! 我正在尝试在 Google Chrome 中创建个性化的新标签扩展程序,但出现了 JavaScript 时间码问题。虽然它在我使用
我需要编写一个带有倒计时器的 JavaScript 时钟,当到达特定时间时,该计时器开始倒计时 5 分钟。所以我有我的时钟和它的工作,但我不知道从这里到哪里去,当谈到 JavaScript 时,我真的
我开发了一个用于多线程计算的类,一个线程只使用这个类的一个实例。我还想通过从另一个线程迭代此类的容器来测量计算的持续时间。该应用程序是win32。问题是我读过 QueryPerformanceCoun
我有一个像这样的时钟: const timeContainer = document.querySelector('.timeContainer'); var showTime = (timeZone
我在 Canvas 上做了一个时钟,我实际上是在 Canvas 上从中心画线,每一秒我从中心画一条线在一个圆圈里,我最终在时钟上画了秒线。我如何清除之前绘制的线,使其看起来像一个真正的时钟。 非常感谢
我正在尝试编写一个倒计时时钟脚本。我想在未来使用一个设定的日期,并以一种易于阅读的格式倒计时。小时,分钟,秒。我要打印到 16x2 液晶显示器。我遇到的问题是试图将日期之间的差异的输出转换为一种很好的
我在计算进程的 CPU 时间的各种机制上研究了 stackoverflow 线程。 clock() 内部是如何实现的?它是否使用 rdtsc()(如果是这样,那么它对核心之间的迁移很敏感)。 此外,g
我需要在时钟上显示服务器时间。以下是我目前拥有的代码。我通过 Ajax 调用获得服务器时间。问题是,如果用户更改它的本地/计算机时钟,它也会更新脚本的时钟,这是不对的——它应该继续而不改变,我被卡住了
当我运行下面的代码时,我得到了一个值 0,有几次我确实得到了 intAddition 的值。我已经尝试了很多我在网上找到的建议,但还没有成功。我的同学向我展示了他是如何做的,这与我的非常相似。他从他的
我正在尝试使用 asm 和 rdtsc 实现我自己的 clock() 版本。但是我很不确定它的返回值。是循环吗?奥德是微秒吗? 我也对 CLOCKS_PER_SEC 感到困惑。这怎么可能是恒定的? 是
我是一名优秀的程序员,十分优秀!