用于While循环的基于ARM的板上的巨大CPU负载

时间:2017-11-20 04:32:36

标签: c linux arm cross-compiling

我有一块iMX6主板,其中一个应用程序耗费了大量CPU而没有做太多工作..我编写了一个示例代码而不是仅发布原始应用程序

#include <stdio.h>

int main(int argc, char *argv[])
{
        printf("Hello World\r\n");
        while(1);
        return 0;
}

这占用了25%的CPU负载..能不能告诉我如何降低CPU负载

更新

添加50微秒的睡眠会使CPU负载直接降低2%

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
        printf("Hello World\r\n");
        while(1)
        {
                usleep(50);
        }
        return 0;
}

1 个答案:

答案 0 :(得分:2)

这是busy looping的一个例子。

while循环正在消耗其中一个核心的所有可用资源。由于你有四个核心,你会看到25%的CPU负载。

您可以导致不使用任何CPU资源的定时延迟,如下所示:

#ifdef _WIN32
#include <Windows.h>
#else
#include <unistd.h>
#endif

int main()
{
  pollingDelay = 100
  //do stuff

  //sleep:
  #ifdef _WIN32
  Sleep(pollingDelay);
  #else
  usleep(pollingDelay*1000);  /* sleep for 100 milliSeconds */
  #endif

  //do stuff again
  return 0;
}

如果您要等待用户,以下操作。如果用户在进入之前坚决按键,你可能需要做一些更复杂的事情。

printf("Press ENTER key to Continue\n");  
getchar();