While 循环在基于 ARM 的板上的巨大 CPU 负载
Huge CPU Load on ARM based board for While loop
我有一个 iMX6 板,我的一个应用程序在没有做太多工作的情况下占用了很多 CPU。我写了一个示例代码,而不是仅仅发布原始应用程序
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Hello World\r\n");
while(1);
return 0;
}
这占用了 CPU 负载的 25%.. 你能告诉我我可以做些什么来减少 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;
}
这是 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();
我有一个 iMX6 板,我的一个应用程序在没有做太多工作的情况下占用了很多 CPU。我写了一个示例代码,而不是仅仅发布原始应用程序
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Hello World\r\n");
while(1);
return 0;
}
这占用了 CPU 负载的 25%.. 你能告诉我我可以做些什么来减少 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;
}
这是 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();