Tokio 概览

Tokio 作为主流 async 运行时的定位:执行器、I/O、定时器、任务与何时引入。

#type / concept #status / growing #tech / dev #resource / rust

[!info] 关联笔记

Tokio 概览

这个概念为什么出现

标准库定义了 Future,但没有完整的生产级网络运行时。
Tokio 提供多线程执行器、异步 I/O、定时器、同步原语与生态(hyper 等)基础。

[!abstract] 一句话理解 Tokio 是 Rust 主流 async 运行时:驱动 Future、提供 async I/O 与工具;语言 async 语法 + Tokio(或其他运行时)才组成可上线服务。

最小可运行示例

场景:选择运行时——文档级最小形态

以下展示典型入口形状(需在 Cargo.toml 依赖 tokio 才能编译运行)。

// Cargo.toml 依赖示例:
// tokio = { version = "1", features = ["full"] }
//
// 业务意图:启动运行时并并发等两个定时器。
// 教学点:#[tokio::main];tokio::spawn;time::sleep。

/*
#[tokio::main]
async fn main() {
    let h = tokio::spawn(async {
        tokio::time::sleep(std::time::Duration::from_millis(10)).await;
        "worker-done"
    });
    tokio::time::sleep(std::time::Duration::from_millis(5)).await;
    println!("main-progress");
    println!("{}", h.await.unwrap());
}
*/

fn main() {
    println!("add tokio dependency to run the async sample above");
}

建议:按注释加入依赖后 cargo run

结合场景再看三个关注点

  1. 运行时是依赖不是语言内置
  2. feature 可裁剪 减体积
  3. 与 hyper/axum/tonic 生态衔接

核心概念与准确模型

组件作用
Runtime调度任务
tokio::spawn任务并发
tokio::io / net异步 I/O
sync异步锁/channel
time睡眠/间隔/超时

多线程 vs current_thread 运行时选型看负载。

设计动机

  • 生产可用的异步栈
  • 性能与功能平衡
  • 社区事实标准之一

边界与误区

  • 在 async 中调用阻塞 std I/O
  • 运行时嵌套不当
  • 版本与 feature 不匹配

[!warning] 常见误区:所有 Rust 项目都要 Tokio CLI/CPU 工具可能不需要。

工程实践

  1. 显式 features
  2. 统一超时/取消
  3. 指标:任务排队、I/O
  4. 优雅关闭:signal + 中止 spawn

本节总结

  • Tokio = 执行器 + async 设施
  • 服务开发常用底座
  • 先懂 Future 再绑运行时

自测题

  1. 没有 Tokio 能写 async fn 吗?
  2. spawn 与直接 await 的差异?
参考答案
  1. 能写,但需要某个执行器来跑。
  2. spawn 并发调度;直接 await 在当前任务内顺序推进。

延伸阅读与资料来源

资料类型支撑内容
Tokio 官网生态总览
Tokio tutorial文档入门
docs.rs/tokioAPI模块
创建于 2026/7/15 更新于 2026/7/15