睡眠時間を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