首页 > 解决方案 > 为什么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--);
我该怎么做才能消除/减轻这种影响?

谢谢~

标签: c++performanceusleep

解决方案


推荐阅读