Rust tokio::time::sleep 与 std::thread::sleep()区别

Rust tokio::time::sleep 与 std::thread::sleep()区别这两者都是让当前线程 任务暂停一段时间 但它们工作方式完全不同 总体区别 同步阻塞 vs 异步挂起对比项 std thread sleeptokio time sleep

欢迎大家来到IT世界,在知识的湖畔探索吧!

这两者都是让当前线程/任务暂停一段时间,但它们工作方式完全不同

✅ 总体区别:同步阻塞 vs 异步挂起

对比项

std::thread::sleep

tokio::time::sleep().await

属于哪个模块

std::thread

tokio::time

是否异步

❌ 同步阻塞

✅ 异步挂起,不阻塞线程

会不会阻塞线程

✅ 会阻塞当前线程

❌ 不阻塞线程,只挂起当前 async 任务

适用场景

普通同步程序 / 不使用 Tokio 的代码

在 Tokio 异步环境中(#[tokio::main])

精度和调度

操作系统调度(实际等待)

由 Tokio 的任务调度器精确控制

是否能被取消/超时控制

❌ 不能被中断

✅ 可被 .timeout() 等取消

使用场景说明:

✅ 1. std::thread::sleep 使用示例:

use std::{thread, time::Duration}; fn main() { println!("sleeping..."); thread::sleep(Duration::from_secs(2)); // 阻塞线程 2 秒 println!("done."); } 

欢迎大家来到IT世界,在知识的湖畔探索吧!

适合写在普通函数里,不能在 async 函数中用,否则会阻塞整个 Tokio runtime!

✅ 2. tokio::time::sleep 使用示例:

欢迎大家来到IT世界,在知识的湖畔探索吧!use tokio::time::{sleep, Duration}; #[tokio::main] async fn main() { println!("async sleeping..."); sleep(Duration::from_secs(2)).await; // 异步挂起 2 秒 println!("done."); } 

只能用于 async 函数中,而且不会阻塞线程,Tokio 会把这段时间让给其他任务去执行(高效)。

⚠️ 使用注意

在 #[tokio::main] async fn main() 这样的异步上下文中:

  • 不要使用 std::thread::sleep —— 会阻塞整个异步线程池,降低性能。
  • ✅ 用 tokio::time::sleep().await 才能真正异步。

✅ 总结

场景

推荐使用

同步代码 / 非 async 函数

std::thread::sleep

异步代码 / async 函数中

tokio::time::sleep().await

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/138372.html

(0)
上一篇 34分钟前
下一篇 2025年 3月 13日 下午9:23

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信