999μs如何太短但1000μs恰到好处?

tsh*_*ang 6 linux rust rust-obsolete

当我运行以下代码时,我得到some output:

use std::thread::Thread;

static DELAY: i64 = 1000;

fn main() {
    Thread::spawn(move || {
        println!("some output");
    });

    std::io::timer::sleep(std::time::duration::Duration::microseconds(DELAY));
}
Run Code Online (Sandbox Code Playgroud)

但如果我设置DELAY为999,我什么也得不到.我认为999和1000足够接近不会造成这样的差异,这意味着必须有其他东西在这里发生.我也试过Duration::nanoseconds(999_999和1_000_000),我看到了同样的行为.

我的平台是Linux,我几乎可以一直重现这种行为:使用999的结果some output不到1%的运行.


作为旁注,我知道这种做法是错误的.

win*_*ner 28

sleep函数以1毫秒的增量休眠,如果毫秒数小于1,则根本不休眠.以下是代码的相关摘录:

pub fn sleep(&mut self, duration: Duration) {
    // Short-circuit the timer backend for 0 duration
    let ms = in_ms_u64(duration);
    if ms == 0 { return }
    self.inner.sleep(ms);
}
Run Code Online (Sandbox Code Playgroud)

在你的代码中,999微秒使它根本不睡眠,并且主线程在生成的线程可以打印其输出之前结束.主线程以1000微秒(即1毫秒)的速度进行睡眠,使得生成的线程有机会运行.