睡眠的目的是什么(长毫微,int nanos)?

2022-09-01 17:45:24

在 JDK 中,它实现为:

public static void sleep(long millis, int nanos) 
throws InterruptedException {
if (millis < 0) {
        throw new IllegalArgumentException("timeout value is negative");
}

if (nanos < 0 || nanos > 999999) {
        throw new IllegalArgumentException(
            "nanosecond timeout value out of range");
}

if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
    millis++;
}

sleep(millis);
}

这意味着这个论点根本没有做任何事情。nanos

它背后的想法是,在具有更精确时序的硬件上,它的JVM可以为它提供更好的实现吗?


答案 1

常规操作系统没有足够细粒度的分辨率来一次休眠几纳秒。但是,存在实时操作系统,其中将事件安排在确切的时刻发生至关重要,并且许多操作的延迟非常低。ABS系统是实时操作系统的一个例子。在这样的系统上,睡眠纳秒比在正常操作系统上更有用,在正常的操作系统上,操作系统无法可靠地睡眠少于15毫秒。

但是,拥有两个单独的 JDK 不是解决方案。因此,在Windows和Linux上,JVM将最好地尝试睡眠x纳秒。


答案 2

它看起来像是一个面向未来的补充,因为我们都有petaflop笔记本电脑,并且我们通常以纳秒为单位指定延迟。同时,如果指定纳秒级延迟,则会出现毫秒级延迟。

当硬件改进并且JVM紧随其后时,应用程序将不需要重写。