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