#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:
- поскольку эта программа ничего не делает, кроме сна
- и ваша система имеет достаточно хороших ядер процессора.
- как и какая часть процессора показывает 2 %? us, sy, id, wa, st?