“时钟”是否测量“睡眠”,即挂起的线程?

2024-04-21

我正在尝试理解clock_t clock(void);功能更好,有以下问题:

我理解正确吗clock测量进程的滴答数,因为它是积极奔跑 and sleep挂起调用线程——在这种情况下只有一个线程,即主线程——因此挂起整个进程。意思就是clock不测量进程的 cpu 时间(滴答数),因为它没有主动运行?
如果是这样,推荐的方法来测量实际所需的时间是什么?

"The clock()函数返回程序使用的处理器时间的近似值。”Source https://linux.die.net/man/3/clock
“CPU 时间(处理时间)以时钟周期或秒为单位进行测量。”Source https://en.wikipedia.org/wiki/CPU_time
“每秒的时钟滴答数可以通过以下方式获得:sysconf(_SC_CLK_TCK);" Source https://linux.die.net/man/2/times

#include <stdio.h>  // printf
#include <time.h>   // clock
#include <unistd.h> // sleep

int main()
{
  printf("ticks per second: %zu\n", sysconf(_SC_CLK_TCK));

  clock_t ticks_since_process_startup_1 = clock();
  sleep(1);
  clock_t ticks_since_process_startup_2 = clock();

  printf("ticks_probe_1:    %zu\n", ticks_since_process_startup_1);
  printf("sleep(1);\n");
  printf("ticks_probe_2:    %zu\n", ticks_since_process_startup_2);
  printf("ticks diff:       %zu <-- should be 100\n", ticks_since_process_startup_2 - ticks_since_process_startup_1);
  printf("ticks diff sec:   %Lf <-- should be 1 second\n", (long double)(ticks_since_process_startup_2 - ticks_since_process_startup_1) / CLOCKS_PER_SEC);
  return 0;
}

结果输出:

ticks per second: 100
ticks_probe_1:    603
sleep(1);
ticks_probe_2:    616
ticks diff:       13 <-- should be 100
ticks diff sec:   0.000013 <-- should be 1 second

Does clock措施sleep即挂起的线程?

No.

(嗯,它可以测量它,没有什么反对它。你可能有一个非常糟糕的操作系统来实现sleep() as a while (!time_to_sleep_expired()) {}忙循环。但是任何有自尊心的操作系统都会尝试让进程在运行时不使用CPU。sleep()).

这意味着时钟不会测量进程的 cpu 时间(滴答声),因为它没有主动运行?

Yes.

如果是这样,推荐的方法来测量实际所需的时间是什么?

衡量“实时”使用情况clock_gettime(CLOCK_MONOTONIC, ...)在 POSIX 系统上。

每秒时钟滴答数可以使用以下命令获得:sysconf(_SC_CLK_TCK);

是的,但请注意sysconf(_SC_CLK_TCK); is not CLOCKS_PER_SECOND。你不使用前times()在你的函数中,你使用clock(),我真的不明白你为什么打印sysconf(_SC_CLK_TCK);。无论如何,请参阅示例sysconf(_SC_CLK_TCK) 与 CLOCKS_PER_SEC https://stackoverflow.com/questions/39712808/sysconf-sc-clk-tck-vs-clocks-per-sec .

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“时钟”是否测量“睡眠”,即挂起的线程? 的相关文章

随机推荐

  • 无法使用 junit 测试异常

    我有一个包含 try catch 块的方法 但我不知道如何使我的测试通过 这是我的代码 public class ClassToTest public void loadFileContent try InputStream fileStr
  • 在 IIS7 中使用 WAS 时,global.asax Application_Start 等效项是什么

    我想对当前托管在 IIS7 中的 WCF 应用程序使用 netTcpBinding 这意味着将其配置为使用 WAS 这相当简单 但是 我的应用程序之前使用了 global asax 文件中的 Application Start 事件 我不需
  • 使用嵌套数组过滤对象数组

    所以我试图在对象数组上设置嵌套过滤器 问题是过滤器应用在对象内部的另一个对象数组的键上 这是代码 const items name 123 id 1 value true arr id 1 name 456 id 2 value false
  • iOS 7 错误警告:在演示或关闭正在进行时尝试从视图控制器 关闭

    我在 iOS 7 中遇到了 iOS 6 中未出现的问题 我有一个导航控制器 它显示另一个导航控制器来添加员工 第二个控制器以模态方式呈现 当我使用 取消 或 完成 按钮关闭第二个控制器时 出现错误 这是错误 QuickSchedule 88
  • 检查 LocalDateTime 是否在时间范围内

    我的时间 A 应该在时间 B 的 90 分钟范围内 之前和之后 示例 时间为 4 00 pm 时间 A 应介于 2 30 pm 90 到 5 30 pm 90 之间 尝试了以下方法 if timeA isAfter timeB minusM
  • 只允许在 Codeigniter 中看到路由中指定的 URL

    如果我有一个名为articles的控制器 它有一个名为view articles的方法 用户可以输入http example com articles view articles some post http example com art
  • python - 使用selenium在页面上查找电子邮件地址

    我正在尝试从网站获取电子邮件地址列表 并且非常接近 我的代码如下所示 我收到以下错误 发生的情况是 有一个链接页面 然后单击该链接 在下一页中有一个电子邮件地址 单击链接后 我试图打印每个页面内的电子邮件地址 这是链接点击进入的页面示例 h
  • 如何取消或停止客户端的推送通知?

    我有一个向客户端发送推送通知的网络服务器 客户端可以拦截推送通知UNNotificationServiceExtension在 iOS 10 上并更改内容 现在我想取消在某些通知上在客户端显示的推送通知 我怎么做 我尝试做 self con
  • 两个连续 KeyDown 事件之间的延迟较长

    我正在编写一个小游戏引擎 纯粹是为了从内部了解它们是如何工作的 我目前不想搞乱 OpenGL 或 DirectX 所以我坚持使用 GDI 和所有 WinForms 东西在控件上绘图 显然 我需要处理输入 更具体地说 是键盘事件 然而 这带来
  • WIX 合并 C++ 运行时

    我已经合并了 msm 与 2015 crt
  • Scikit - 如何定义绘制 roc 曲线的阈值

    我有一个增强树模型以及测试数据集的概率和分类 我正在尝试绘制相同的 roc curve 但我无法弄清楚如何在 scikit learn 中定义 roc 曲线的阈值 alpha from sklearn metrics import prec
  • rxjs:定期执行一些操作,中间有特定的延迟

    客户端应用程序向服务器发送请求 这可能需要很长时间才能完成 一旦请求完成或失败 客户端应该等待一段时间 即10秒 然后再次发送请求 目前的工作解决方案是这样的 appRequest new Subject ngOnInit void thi
  • 在状态更改时从 asp.net 的验证器获取事件到 jquery

    如果我的页面的验证器更改其状态 我希望在 jquery 中触发一个事件 这是我的用例 在地址表单中 验证器全部被隐藏 如果我提交表格 就会显示出来 现在我想触发一个 jQuery 函数 它用红色边框渲染所有行 不是输入字段 而是它们的父行
  • 使用 TypeScript、Jest 和 Enzyme 进行 React 单元测试:无法调用可能“未定义”的对象

    我正在使用 TypeScript 构建一个 React Native 应用程序 我正在使用 Jest 和 Enzyme 进行组件测试 我也在使用 React 导航 在我的最后一个问题中 https stackoverflow com que
  • 如何从 Chrome 扩展程序填写网页表单中的文本字段?

    到目前为止 我已经有了一个扩展程序 列出了用户所在的网页和一个按钮 单击该按钮后 应在文本字段中填写 testing123 在我正在测试的网页上 表单有一个 id 和名称 form 文本字段有一个 id 和名称 body 如果我能在填写此文
  • py.test 无法导入我的模块

    我正在努力正确导入 python 我想要实现的是拥有一个包含多个源文件的模块和一个包含单元测试的测试文件夹 无论我做什么 我都无法让 py test 3 执行我的测试 我的目录布局如下所示 module init py testclass
  • 上传成功后显示上传的图片

    我正在 Magnific Popup 灯箱 内使用 Carrierwave gem 我想做的是after上传图片 它将显示新上传的图片 目前 从灯箱上传图像后 它将继续显示您最初查看的图像 并显示 成功 消息 表明您的图像已成功上传 当前的
  • 托管多个 django 站点时出现问题(设置交叉)

    我最近设置了一个 Web 服务器 目前托管着几个静态页面网站和两个 django 项目 这两个 django 项目是 abc 和 xyz 分别位于主文件夹中的不同目录中 每个都有自己的 wsgi 脚本 该脚本指向各自的 settings p
  • 将 rbf 与 scipy 一起使用时出现内存错误

    I want to plot some points with the rbf function like here to get the density distribution of the points 如果我运行以下代码 它工作正常
  • “时钟”是否测量“睡眠”,即挂起的线程?

    我正在尝试理解clock t clock void 功能更好 有以下问题 我理解正确吗clock测量进程的滴答数 因为它是积极奔跑 and sleep挂起调用线程 在这种情况下只有一个线程 即主线程 因此挂起整个进程 意思就是clock不测