异步 Rust
“异步”是一种并发模型,可以同时执行多个任务。具体做法是逐个执行任务直至阻塞,然后切换到另一项可以继续进行的任务。该模型支持在有限数量的线程上运行更多任务。原因在于,每个任务的开销通常很低,并且操作系统提供了基元来高效识别能够执行的 I/O 任务。
Rust 的异步操作基于 “Futures” 来实现,即表示未来可能完成的工作。系统会对这些 Future 进行 “轮询”,直到显示全部已完成。
由异步运行时对这些 Future 进行轮询,并且有多种不同的运行时可供选择。
比较
Python 的
asyncio
中也有类似的模型。不过,其Future
类型基于回调的实现方式,而非通过轮询。使用异步 Python 程序需要类似于 Rust 中运行时的 “循环” 进行管理。JavaScript 的
Promise
与之类似,但同样基于回调的实现方式。语言运行时实现了事件循环,因此许多与 Promise 解析相关的细节被隐藏起来。