0

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;
}

1000 us = 1 ミリ秒であるため、まったく同じ量をスリープすることになっています。redhat 6 では、スリープを使用すると、常に 0% の使用率になります。usleep を使用する場合、常に 1.5% から 2% の時間がかかります。私が維持しているサーバー全体にそれらの多くがあります。redhat 6 で usleep が CPU センシティブである理由の説明はありますか? Redhat 5 では、違いは見られません。ところで、一般的に、redhat 6 では CPU の感度がはるかに高いことがわかります。そのあたりの既知の問題はありますか?

4

2 に答える 2

0

usleep パラメーターは、1000 分の 1 秒ではなく、1000 分の 1 秒です。マイクロ対ミリ。

さらに 3 つのゼロを追加すると、期待どおりになると思います。

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

usleep() 関数は、(少なくとも) usec マイクロ秒の間、呼び出しスレッドの実行を中断します。

于 2013-06-19T07:55:48.053 に答える