c++ - 为什么usleep会影响后面的代码性能?
问题描述
我是性能分析的新手,我的系统出现了性能问题。
代码片段就像
int main()
{
for(int i {0}; i < 20000; ++i)
{
//usleep(30*1000);
clock_t start = clock();
int ii = 10000000;
while (ii--);
clock_t end = clock();
double cpu_time_elapsed = ((double) (end - start)) / CLOCKS_PER_SEC * 1000;
fprintf(stdout, "%0.*f %10ld - %10ld\n", 0, cpu_time_elapsed, end, start);
}
return 0;
}
我做了几个测试:一个会评论 usleep 行,另一个不会。
输出结果为:
(处理后的输出显示持续时间和测量此持续时间的次数)
(无睡眠:几乎消耗 11ms)
11 -- 19860
12 -- 139
13 -- 1
(睡眠 30ms,广泛分散)
11 -- 337
12 -- 205
13 -- 391
14 -- 404
15 -- 344
16 -- 133
17 -- 409
18 -- 84
19 -- 279
20 -- 254
21 -- 153
22 -- 669
23 -- 1275
24 -- 1679
25 -- 2609
26 -- 2520
27 -- 594
28 -- 2131
29 -- 1533
30 -- 123
31 -- 1985
32 -- 219
33 -- 431
34 -- 750
35 -- 32
36 -- 337
37 -- 15
38 -- 50
39 -- 20
40 -- 25
41 -- 7
42 -- 2
43 -- 1
究竟是什么原因让“睡眠”对后来者产生如此巨大的影响while (ii--);
?
我该怎么做才能消除/减轻这种影响?
谢谢~
解决方案
推荐阅读
- docker - 连接 nginx 和 php 容器的 Docker 链接
- excel - 使用索引和匹配返回错误:“公式或函数无法使用值”
- laravel - Laravel 覆盖包中的父视图
- android - 尝试访问 PlacesClient.findCurrentPlace() 时出现 com.android.volley.TimeoutError
- python - 使用线程python将参数从一个类传递到另一个类
- swift - 在 Swift 函数中,当函数在循环内包含带有 if 语句的 for 循环时,为什么“return”必须在 for 循环之外?
- javascript - 如何使用复制到剪贴板
- r - 函数正在为无效参数执行
- keras - 为什么 YOLO v3 Keras 越野车?
- c# - 通过 XAML 将 Windows Accent Color 设置为 WPF 窗口背景并监听 Accent Color Change