C 在linux内核中可以以微秒的粒度睡眠吗?

C 在linux内核中可以以微秒的粒度睡眠吗?,c,linux-kernel,linux-device-driver,sleep,C,Linux Kernel,Linux Device Driver,Sleep,在linux内核中可以以微秒的粒度睡眠吗? 据我所知,有一个msleep() 还有udelay() 粒度。 但我需要睡眠(不忙等待)微秒的粒度 有没有办法在linux内核中编写一个新的API来实现这一点?有。最高分辨率的等待可以通过使用不带FDs的ppoll并传递以纳秒为单位的timespec来实现。请注意,ppoll将至少等待该时间量-基础时钟的粒度可能更差。如果您需要小于一瞬间的精度,hr计时器是最佳选择。在内核中启用高分辨率计时器配置,您可以使用hrtimer\u nanosleep(用户

在linux内核中可以以微秒的粒度睡眠吗? 据我所知,有一个
msleep()
还有
udelay()
粒度。
但我需要睡眠(不忙等待)微秒的粒度


有没有办法在linux内核中编写一个新的API来实现这一点?

有。最高分辨率的等待可以通过使用不带FDs的
ppoll
并传递以纳秒为单位的
timespec
来实现。请注意,
ppoll
将至少等待该时间量-基础时钟的粒度可能更差。

如果您需要小于一瞬间的精度,hr计时器是最佳选择。在内核中启用高分辨率计时器配置,您可以使用hrtimer\u nanosleep(用户空间posix nanosleep的基础)等hrtimer API,这些API睡在nanosecs res中


更多参考和

您可能会找到下面有用的链接,这个问题似乎是从Linux中衍生出来的。默认情况下,时间片在0.75毫秒到6毫秒之间,因此睡眠时间少于这个时间没有任何意义
udelay
无论如何都会尝试将处理器置于低功耗模式(这基本上就是空闲任务所做的,因此您不会错过太多);我在中找到了看似有用的信息。为什么忙着等待与否很重要?如果您需要/期望其他进程在您的进程繁忙时获得CPU时间,那么您可能对Linux的调度程序期望过高。