Linuxカーネルのsleep()、usleep()、nanosleep()関数の違い

Linuxにおいて、遅延処理に利用されるsleep()、usleep()、nanosleep()関数の違いを以下に示す。

  1. sleep関数:
  1. 関数のプロトタイプ: unsigned int sleep(unsigned int seconds)
  2. スリープする秒数を指定する引数。
  3. この関数は処理をスリープさせ、指定した時間後に再び起動します。
  4. この関数は秒単位でしかなく、最小遅延は1秒です。
  1. usleep()関数:
  1. 関数のプロトタイプ: int usleep(useconds_t microseconds)。
  2. プロセスがスリープするために指定する、マイクロ秒単位の時間
  3. その関数はプロセスを状態をスリープさせて、指定した時間が過ぎたら起こす
  4. 本関数の精度はマイクロ秒単位であるため、最小遅延単位は1マイクロ秒となります。
  1. ナノスリープ関数:
  1. 関数プロトタイプ: int nanosleep(const struct timespec *req, struct timespec *rem);
  2. パラメータ req はスリープする時間の構造体 timespec で、秒とナノ秒が含まれます。
  3. パラメータremとは、残りの睡眠時間で、struct timespec構造体で表され、未完了睡眠時間の取得に使用されます。
  4. この関数はプロセスをスリープ状態に移行させ、指定された時間の後に再びウェイクアップします。
  5. この関数の正確性はナノ秒単位で、つまり最も短い遅延単位は1ナノ秒です。

要約:

  1. sleep() は最も基本的なディレイ関数で、秒単位でディレイします。
  2. usleep() は、sleep() 関数の拡張で、マイクロ秒単位でスリープします。
  3. nanosleep() は最も正確な遅延関数で、ナノ秒単位で遅延でき、残りの睡眠時間を取得することもできます。
bannerAds