web-dev-qa-db-ja.com

なぜ睡眠ではなくusleepを使用するのか

アプリケーションのコードを読んでいて、何かが気になりました。コードは:usleep(6*1000*1000)でした。読みやすさの問題でこの形式を使用していることを理解しています。

sleepusleepの両方がnanosleep関数を使用していると思うので、私の質問は、まったく同じことを行うsleep(6)を使用しないのはなぜですか(つまり、 6秒)? usleepを使用すると、パフォーマンスが向上しますか? usleepはもっと「ジェネリック」ですか?

6
Loay Ashmawy

睡眠も睡眠もナノスリープ機能を使っていると思いますが、

彼らはそうするかもしれないし、しないかもしれない。私は、その仮定に対するCおよびPOSIX標準の正当性を認識していません。

だから私の質問は:なぜまったく同じことをするsleep(6)を使用しないのですか(つまり:6秒間スリープします)? usleepを使用すると、パフォーマンスが向上しますか? usleepはもっと「ジェネリック」ですか?

sleep()関数はAT&T Unixバージョン7で作成されました。usleep()関数はBSD4.3で作成されました。 POSIXは両方から引き出された機能の組み合わせを標準化していますが、2つのうち1つしか利用できない可能性があり、どちらがUnixの特定のフレーバーの機能であったかがありました。

現在、usleep()は廃止され、POSIXから削除されました。それはまだ広くサポートされていますが、新しいコードでは代わりにnanosleep()(またはsleep())を使用する必要があります。

9
John Bollinger

スリープへの引数は秒、usleepへの引数はマイクロ秒です。それ以外は同じだと思います。

sleep($ n)== usleep($ n * 1000000)usleep(25000)は0.025秒間のみスリープします。

3
Ashwin Golani