Ответ на этот вопрос зависит от вашей платформы.
В моей собственной системе Linux, Perl usleep
уже вызывает nanosleep
:
$ strace -- perl -le 'use Time::HiRes; Time::HiRes::usleep(1);' 2>&1 | tail
open("/usr/share/perl/5.10/Exporter/Heavy.pm", O_RDONLY) = 4
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff375a5740) = -1 ENOTTY (Inappropriate ioctl for device)
lseek(4, 0, SEEK_CUR) = 0
read(4, "package Exporter::Heavy;\n\nuse st"..., 4096) = 4096
read(4, "nd without a leading &.\n\t # ("..., 4096) = 2250
read(4, "", 4096) = 0
close(4) = 0
close(3) = 0
nanosleep({0, 1000}, NULL) = 0
exit_group(0) = ?
(На самом деле, я уверен, чтоusleep
из библиотеки C вызывает nanosleep
внутри.)
Фактическое разрешение, которое вы можете ожидать, зависит от вашей конкретной платформы.Эти функции сна могут иметь разрешение, измеренное в миллисекундах (особенно для длительных снов), и они всегда пытаются округлить.
Если вы укажете точную версию вашего оборудования и операционной системы,кто-то может найти для вас эффективное разрешение nanosleep
.