tokio的官方文档地址:https://tokio.rs/tokio/tutorial
一、tokio依赖
这里我们采用的tokio异步框架,首先,在Cargo.toml中导入tokio的dependecies:
[dependencies]
tokio = { version = "1", features = ["full"] }
二、多线程执行
use std::{thread, time};
#[tokio::main]
async fn main() {
let t1 = tokio::spawn(async {
for i in 0..10 {
thread::sleep(time::Duration::from_millis(1000));
println!("thread 1");
}
});
let t2 = tokio::spawn(async {
for i in 0..10 {
thread::sleep(time::Duration::from_millis(1000));
println!("thread 2");
}
});
t1.await.unwrap();
t2.await.unwrap();
}
这里我们用tokio::spawn函数生成了两个线程,它们的功能很简单,就是每隔1s打印一个字符串。
其中tokio::spawn中的async前缀是不可以省略的,如果我们省略的话,就会有如下报错:
报错
只有加上异步标记async,报错才会消失。而且在这里进行的let t1 = xxx和let t2 = xxx的操作,其中spawn内部的代码不会被执行,只有在下面 t1.await.unwrap()、t2.await.unwrap()运行后,才会被真正执行。执行结果如下: 交错输出
可以看到这两个线程t1和t2,确实是在并发执行。
网友评论