一、前言
异步是一个非常强大特性,它有相当多的实现模型,其中比较知名的“协程”,go语言的并发编程就是借助的“协程”这一概念达到了非常高的性能,
不理解协程的可以查看另外一篇文章:协程与线程。
在这众多实现模型中,最基本就是多线程模型了,由于其是系统本身底层提供的,所以写起来、理解起来都会较为简单。
还有就是事件驱动模型,和windows消息机制差不多,不理解的可以参考:windows编程入门。
除了上面三个之外,另一个常用的异步模型便是async/await
。
它的主要麻烦之处在于其底层实现非常复杂,但好在这并不需要我们自己去实现。直接使用即可。
第二个麻烦之处在于其不好理解,这便是本章要做的事情了。
由于rust语言本身提供了await
、async
以及Future
这三个async/await
模型最基础的特性,所以使得实现该模型变得更加容易。
rust中异步库有很多,但目前性能最好、效率最高、最流行的库是一个叫tokio
的。
从一张网上流传甚广、据说是官方测试各种异步框架效率也能看出tokio
的恐怖之处:
该图展示的大概是各种异步框架所实现的最小http
服务器单位时间所能处理的请求数量。
所以本章也将直接以tokio为例对rust中异步的使用进行介绍。
二、基本理解与使用
首先你需要下载tokio
,在配置文件中添加下面这行代码:
tokio = { version = "1.36.0", features = ["full"] }
它的基本使用方法如下:
fn main() {
let rt = tokio::runtime::Runtime::new().unwrap();
rt.block_on(async {
println!("hello tokio");
})
}
看起来似乎很复杂,这里对其简单解析一下:
- 首先我们需要创建一个
tokio
的“运行时”,也就是上面的rt
变量,它将成为整个程序的异步基础。