Appearance
Rust 异步编程:Future、执行器与取消
修订于 2026-10-12。旧文关于版本路线图和框架优劣的绝对判断已移除。
Rust 的 async 函数会产生 Future。Future 需要由执行器轮询,才能推进异步任务;await 表示可能暂停并让出执行机会。Rust 标准库定义 Future 等基础接口,应用仍需要合适的运行时来执行异步工作。
什么时候适合异步
大量等待网络或磁盘 I/O 的任务可以在等待期间让执行器调度其他任务。CPU 密集计算并不会因加上 async 而自动并行,阻塞调用也可能占住执行器线程。应先区分并发、并行和非阻塞,再选择线程、任务或两者结合。
工程检查
- 明确每个任务的生命周期,避免请求结束后仍有无人管理的后台工作。
- 传递取消和截止时间;取消 Future 后,先前已完成的外部写入不会自动撤销。
- 限制并发数和队列长度,避免大量任务同时占用内存或冲击下游。
- 检查锁是否跨 await 持有,以及库函数是否会阻塞运行时线程。
- 测试超时、连接中断、部分结果与优雅关闭。
Pin 和 Unpin 涉及 Future 在内存中的位置约束;普通应用通常可从 async/await 和运行时 API 学起,只有编写底层 Future 或处理特定借用问题时再深入。