почему загрузка процессора слишком низкая при опросе с интервалом 1нс

#c #linux #performance #operating-system #system-calls

#c #linux #Производительность #операционная система #системные вызовы

Вопрос:

 #include <stdio.h>
#include <time.h>

int main()
{
    struct timespec stReq;
    stReq.tv_sec = 0;
    stReq.tv_nsec = 1;
    while(1)
    {
        nanosleep(amp;stReq,NULL);
        printf("hello,worldn");
    }

    return 0;
}
  

когда я запускаю этот прогресс, %CPU столбец, показанный top , составляет всего около 2% .

Почему она такая низкая?

Комментарии:

1. итак, удалите printf любой эффект?

2. или, случайно, вы видите, что он печатает 1 миллиард сообщений в секунду?

3. @AnttiHaapala тот же результат после удаления printf

4. Я не голосовал против, потому что, на мой взгляд, прежде чем голосовать против, вы должны объяснить, почему . В данном случае это очень наивный вопрос, он заслуживает объяснения. nanosleep() не удается обработать интервал, меньший детализации базовых часов (то есть системного тика), как в вашем случае с 1nS, эффективно планируя с нормальной скоростью. Более того, printf() не будет выполняться менее чем за 1нС (он взаимодействует с ОС и результирующими синхронизациями, что снова повлияет на эффективное планирование. В конечном результате планирование является стандартным. Плата CU — это эффективный код, выполняемый по сравнению с полным ЦП.

Ответ №1:

  1. поскольку эта программа ничего не делает, кроме сна
  2. и ваша система имеет достаточно хороших ядер процессора.
  3. как и какая часть процессора показывает 2 %? us, sy, id, wa, st?