我想您想要一个 Linux 答案,因为您链接到 Linux 手册。
mio
在 Linux 上使用epoll()
,而不是select()
:
/// | OS | Selector |
/// |------------|-----------|
/// | Linux | [epoll] |
/// | OS X, iOS | [kqueue] |
/// | Windows | [IOCP] |
/// | FreeBSD | [kqueue] |
/// | Android | [epoll] |
相关引述epoll()
是:
timeout 参数指定 epoll_wait() 将阻塞的最小毫秒数。(这个时间间隔会四舍五入到系统时钟粒度,内核调度延迟意味着阻塞间隔可能会被少量溢出。)指定超时时间为-1会导致epoll_wait()无限期地阻塞,同时指定超时时间等于零导致 epoll_wait() 立即返回,即使没有可用的事件。
因此,Duration::from_secs(0)
不会等待传入事件。你可以查看mio
这里的代码
let timeout_ms = timeout
.map(|to| cmp::min(millis(to), i32::MAX as u64) as i32)
.unwrap_or(-1);
我们可以看到 的行为mio
会复制 的行为epoll()
。