Rust异步编程基石:Tokio运行时从入门到精通(单线程与多线程实战)随着高并发、高性能网络服务的需求日益增长,异步编程已成为现代系统开发不可或缺的一环。在Rust语言的生态中,Tokio扮演着异步运行时的核心角色。它不仅提供了高效的I/O和任务调度机制,还为构建健壮、可伸缩的网络
随着高并发、高性能网络服务的需求日益增长,异步编程已成为现代系统开发不可或缺的一环。在 Rust 语言的生态中,Tokio 扮演着异步运行时的核心角色。它不仅提供了高效的 I/O 和任务调度机制,还为构建健壮、可伸缩的网络应用奠定了基础。本文将通过详尽的代码示例,带您从零开始,掌握 Tokio 运行时的创建、配置,以及在单线程和多线程模式下的实际应用,助您迈出 Rust 异步编程的关键一步。
Rust编程语言的一个异步运行时,但并不是唯一的。
block_on(...)#[tokio::main(flavor = "current_thread")]cargo new tokio_intro
cd tokio_intro/
ls
cc # open -a cursor .
➜ cargo add tokio -F full
如何在 Rust 中使用 Tokio 手动创建并运行一个异步运行时(Runtime)
use tokio::runtime;
async fn hi() {
println!("Hello tokio!");
}
fn main() {
runtime::Builder::new_current_thread()
.enable_all()
.build()
.unwrap()
.block_on(hi());
}
use tokio::runtime;
这一行引入了 Tokio 的运行时模块。Tokio 是 Rust 中最常用的异步运行时库,它负责 执行 async 异步任务、管理事件循环、处理 I/O、定时器等异步操作。
async fn hi()
定义了一个异步函数 hi,其返回一个 Future(异步任务),执行时会打印 "Hello tokio!"。
注意:定义
async fn并不会立刻执行函数体,它只会返回一个 Future 对象,必须由运行时(runtime)来驱动执行。
runtime::Builder::new_current_thread()
这里使用 Tokio 的 Builder 模式 手动创建一个运行时。
new_current_thread() 表示创建一个 单线程 的运行时(所有任务都在当前线程中执行)。new_multi_thread() 来创建多线程运行时。.enable_all()
启用 Tokio 提供的所有功能模块,例如:
tokio::time)tokio::net)tokio::signal)等
如果不启用,某些异步功能可能无法使用。.build().unwrap()
调用 build() 来真正构建运行时,如果创建失败则用 unwrap() 抛出错误(直接 panic)。
.block_on(hi())
block_on() 方法会:
hi() 执行完毕后才返回。
简而言之,这一步是 在同步上下文中运行异步函数。main();block_on 方法执行异步函数 hi();hi() 打印 "Hello tokio!";Hello tokio!
这种写法常用于:
fn main())调用异步函数;若使用常规的 Tokio 宏方式,也可以简化为:
#[tokio::main]
async fn main() {
hi().await;
}
它与上述代码逻辑完全等价,只是用宏自动帮你创建了运行时。
➜ cargo run
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.02s
Running `target/debug/tokio_intro`
Hello tokio!
这段运行结果表示:Rust 项目已经成功编译并执行,程序输出了预期的内容。
具体来说:cargo run 会先编译当前项目(如果代码未变化,则直接使用已有构建结果),然后运行生成的可执行文件。在输出中,Finished 'dev' profile 表示编译完成,Running 'target/debug/tokio_intro' 表示正在运行名为 tokio_intro 的程序。随后,程序中的 Tokio 运行时启动并执行异步函数 hi(),最终在控制台打印出 "Hello tokio!",说明异步任务顺利执行并正常结束。
// use tokio::runtime;
as... 如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!