2013-06-19 2 views
0

Я следующий фрагмент кода на RedHat 6:CPU на Redhat 6

#include <unistd.h> 

int main(int argc, char *argv[]) 
{ 
    while(true) 
    { 
#ifdef SLEEP 
     sleep(1); 
#endif 
#ifdef USLEEP 
     usleep(1000); 
#endif 
    } 

    return 0; 
} 

Это, как предполагается, спать точно такой же maount так 1000 нас = 1 мс В RedHat 6, один со сном принимает 0 % использования все время. Тот, у кого есть спящий режим, занимает от 1,5% до 2% все время. У меня есть многие из них по всему серверу, который я поддерживаю. Любое объяснение, почему usleep гораздо более чувствителен к процессору на redhat 6? На redhat 5 я не вижу различий. Кстати, я вижу, что на redhat 6 процессор намного более чувствителен. Любые известные проблемы вокруг этого?

+0

'usleep' принимает аргумент как ** microsecond **, а не миллисекунду. 1000000 микросекунда равна 1 секунде. поэтому вызовите 'usleep (1000000)' – VoidPointer

+0

. Пожалуйста, прочтите мой комментарий ниже на ответе 1. 1000 us = 1 мс –

+0

@issac, пожалуйста, прочитайте мой ответ ниже. – VoidPointer

ответ

0

Параметр usleep составляет МИЛЛИОНЫ секунд, а не тысячные доли. микро против милли.

Добавить еще три нуля, и я думаю, вы увидите, чего вы ожидаете. Функция

http://linux.die.net/man/3/usleep

USleep() приостанавливает выполнение вызывающего потока (по крайней мере) мксек микросекунд

+0

1000 микросекунд - это ровно одна миллисекунда, поэтому вышеуказанное ждет того же количества времени. Сон в C (в отличие от bash) ждет в миллисекундах, так что 1000 us равно ровно 1 мс, поэтому вышеупомянутое должно ждать то же самое время –

+0

Нет ... 'sleep()' в C принимает аргумент за считанные секунды. Он работает точно так же, как встроенная оболочка. – duskwuff

0

sleep берет свой аргумент в секунд в то время как usleep берет свой аргумент в микросекунд ,

Упомянем,

1 second = 1000 milli-second 
1 milli-second = 1000 micro-second 

Значит, в отличие от вас ожидается, usleep(1000) не будет иметь одинаковое время ожидания, как sleep(1).

usleep(1000) версия будет проходить чаще, чем версия sleep(1), вызывая больше использования ЦП.

Чтобы иметь аналогичное время ожидания около 1 секунды, используйте либо sleep(1), либо usleep(10000000).

У меня недостаточно информации по сравнению с redhat 5 и 6 или с внедрением usleep. This question может предоставить вам некоторую информацию.

Смежные вопросы