Linuxスリープコマンド - 1ミリ秒未満のスリープ時間

Linuxスリープコマンド - 1ミリ秒未満のスリープ時間

睡眠時間を0.001s / 1ms未満にするにはどうすればよいですか?

これを使用すると、1ミリ秒間のみ休止状態であるとマークされます。睡眠が少なくなりますか?

$ time sleep 0.00001
sleep 0.00001  0,00s user 0,00s system 79% cpu 0,002 total

答え1

sleep通常、nanosleep(2)システムコールが使用されます。ただし、このシステムコールには高精度パラメータがありますが、実際の精度はLinuxで使用されるタイマーによって異なります。

通常、LinuxカーネルはCONFIG_HZ=250このオプションでコンパイルされます。 (望むより/boot/config-...)。

拡張機能を使用するCONFIG_HIGH_RES_TIMERSと精度が向上します。バラよりhttps://elinux.org/High_Resolution_Timers

忙しく待つ古い動作がありますが、最新のカーネルにはありません。

  In  order  to  support  applications requiring much more precise pauses
  (e.g., in order to control some  time-critical  hardware),  nanosleep()
  would  handle  pauses  of up to 2 milliseconds by busy waiting with mi‐
  crosecond precision when called from a thread scheduled under  a  real-
  time  policy  like  SCHED_FIFO or SCHED_RR.  This special extension was
  removed in kernel 2.5.39, and is thus not available in Linux 2.6.0  and
  later kernels.

また、sleepプロセスを分岐してプログラムをロードするのに時間がかかります。私のシステムには次のものがあります。

time sleep 0.000

real    0m0,007s
user    0m0,001s
sys     0m0,006s

関連情報