linux c语言sleep不占用cpu的验证

1. 不使用sleep的循环程序1.c:

void main(void)
{
    while(1)
    {
        ;
    }
}

编译:gcc 1.c -o 1

运行程序1之前的cpu:

linux c语言sleep不占用cpu的验证_第1张图片

运行一次./1 &,用htop查看cpu:

linux c语言sleep不占用cpu的验证_第2张图片

运行8次./1 &,用htop查看cpu:

linux c语言sleep不占用cpu的验证_第3张图片

运行killall 1,终止所有程序1,用htop查看cpu:

linux c语言sleep不占用cpu的验证_第4张图片

  结论:不使用sleep,循环会一直占用cpu

2.使用sleep(0)的循环程序0.c:

void main(void)
{
    while(1)
    {
        sleep(0);
    }
}

运行8次./0 &,用htop查看cpu:

linux c语言sleep不占用cpu的验证_第5张图片

 结论:sleep(0)的循环仍然会占用cpu。

3.使用sleep(1)的循环程序2.c: 

void main(void)
{
    while(1)
    {
        sleep(1);
    }
}

运行16次./2 &,用htop查看cpu:

linux c语言sleep不占用cpu的验证_第6张图片

结论:sleep(1)的循环基本不占用cpu。

3.使用sleep(1000)的循环程序3.c: 

void main(void)
{
    while(1)
    {
        sleep(1000);
    }
}

运行16次./3 &,用htop查看cpu:

linux c语言sleep不占用cpu的验证_第7张图片

 结论:sleep(1000)的循环基本不占用cpu。

4.使用usleep(1)的循环程序4.c: 

void main(void)
{
    while(1)
    {
        usleep(1);
    }
}

运行16次./4 &,用htop查看cpu:

linux c语言sleep不占用cpu的验证_第8张图片

 结论:usleep(1)的循环占用cpu不多。

5.使用nanosleep的循环程序5.c:

#include 

void main(void)
{
    struct timespec ts;

    ts.tv_sec = 0;
    ts.tv_nsec = 1;

    while(1)
    {
        nanosleep(&ts,NULL);
    }
}

运行16次./5 &,用htop查看cpu:

linux c语言sleep不占用cpu的验证_第9张图片

  结论:nanosleep的循环占用cpu不多。另,这项测试在其他电脑上运行结果可能会不同。

你可能感兴趣的:(linux,编程,c语言,开发语言,后端)