linux c语言sleep不占用cpu的验证
1. 不使用sleep的循环程序1.c:
void main(void)
{
while(1)
{
;
}
}
编译:gcc 1.c -o 1
运行程序1之前的cpu:
运行一次./1 &,用htop查看cpu:
运行8次./1 &,用htop查看cpu:
运行killall 1,终止所有程序1,用htop查看cpu:
结论:不使用sleep,循环会一直占用cpu
2.使用sleep(0)的循环程序0.c:
void main(void)
{
while(1)
{
sleep(0);
}
}
运行8次./0 &,用htop查看cpu:
结论:sleep(0)的循环仍然会占用cpu。
3.使用sleep(1)的循环程序2.c:
void main(void)
{
while(1)
{
sleep(1);
}
}
运行16次./2 &,用htop查看cpu:
结论:sleep(1)的循环基本不占用cpu。
3.使用sleep(1000)的循环程序3.c:
void main(void)
{
while(1)
{
sleep(1000);
}
}
运行16次./3 &,用htop查看cpu:
结论:sleep(1000)的循环基本不占用cpu。
4.使用usleep(1)的循环程序4.c:
void main(void)
{
while(1)
{
usleep(1);
}
}
运行16次./4 &,用htop查看cpu:
结论:usleep(1)的循环占用cpu不多。
5.使用nanosleep的循环程序5.c:
#include <time.h>
void main(void)
{
struct timespec ts;
ts.tv_sec = 0;
ts.tv_nsec = 1;
while(1)
{
nanosleep(&ts,NULL);
}
}
运行16次./5 &,用htop查看cpu:
结论:nanosleep的循环占用cpu不多。另,这项测试在其他电脑上运行结果可能会不同。