【问题标题】:why is cpu load too low when polling in 1ns interval为什么在1ns间隔轮询时cpu负载太低
【发布时间】:2020-12-18 01:18:26
【问题描述】:
#include <stdio.h>
#include <time.h>

int main()
{
    struct timespec stReq;
    stReq.tv_sec = 0;
    stReq.tv_nsec = 1;
    while(1)
    {
        nanosleep(&stReq,NULL);
        printf("hello,world\n");
    }

    return 0;
}

当我运行这个进度时,top 显示的%CPU 列仅与2% 差不多。

为什么这么低?

【问题讨论】:

  • 那么,删除printf - 有什么影响吗?
  • 或者,你偶然看到它每秒打印 10 亿条消息?
  • @AnttiHaapala 删除printf后结果相同
  • 我没有投反对票,因为我认为在投反对票之前你必须解释原因。在这种情况下,这是一个非常幼稚的问题,值得解释。 nanosleep() 无法处理小于底层时钟粒度(即系统滴答声)的间隔,如您使用 1nS 的情况,以正常速率有效调度。此外,printf() 不会在不到 1nS 的时间内执行(它与操作系统交互,由此产生的同步将再次影响有效调度。最终结果调度是标准的。CU 费用是与完整 CPU 相比运行的有效代码。

标签: c linux performance operating-system system-calls


【解决方案1】:
  1. 因为这个程序除了睡眠什么都不做
  2. 并且您的系统具有足够好的 cpu 内核。
  3. cpu 的哪一部分显示为 2%?我们,sy,id,wa,st?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    相关资源
    最近更新 更多