Rust Tokio 异步编程入门
Rust Tokio 异步编程入门
Rust 标准库提供了 async 和 await 语法,但并不自带完整异步运行时。实际项目中,Tokio 是最常见的选择,尤其适合网络服务、任务调度和高并发 IO。
一、最小示例
创建项目后添加依赖:
1 | [dependencies] |
入口函数可以这样写:
1 |
|
#[tokio::main] 会帮你创建运行时。
二、async fn 不会立即执行
调用异步函数会得到一个 Future,只有 .await 后才会真正推进:
1 | async fn fetch_user() -> String { |
这是理解 Rust 异步的关键。
三、并发执行任务
可以用 tokio::spawn 创建异步任务:
1 |
|
被 spawn 的任务需要满足线程安全要求,这也是 Rust 在异步并发里比较严格的地方。
四、不要阻塞运行时线程
在异步函数里直接执行耗时 CPU 操作或阻塞 IO,会影响运行时调度。文件、网络、定时器等尽量使用 Tokio 提供的异步版本。
1 | tokio::time::sleep(std::time::Duration::from_secs(1)).await; |
五、适合使用 Tokio 的场景
Tokio 很适合:
- HTTP API 服务
- TCP、UDP、WebSocket 服务
- 高并发爬虫和任务调度
- 消息队列消费者
如果程序主要是 CPU 密集计算,异步不一定能提升性能。先分清瓶颈,再决定是否引入 Tokio。