标签: tokio
与该标签相关的所有文章 "tokio".
-
Rust 异步生态(总览):从 mio 到 axum 的分层架构
Rust 的异步网络栈是 mio → tokio → hyper → tower → axum 五层,每层职责单一、可独立替换。C++ Asio 把事件通知、调度、定时器、buffer、协程支持打包在一个库里。两种设计没有绝对优劣——Rust 的分层来自语言特性(ownership 使模块边界天然清晰),Asio 的一体化来自 C++ 生态的碎片化(没有统一运行时,不如自己全做)。
-
tokio(四):陷阱与生产最佳实践
tokio 最常见的陷阱分为两类:阻塞运行时(在 async 上下文中做同步操作)和取消安全(Future 在 .await 点被 drop 导致状态丢失)。本文列举 10 个高频陷阱和对应的生产级修复方案,以及 runtime 配置、优雅关闭、可观测性和错误处理的最佳实践。
-
tokio(三):I/O、定时器、同步原语与 select!
tokio 的 I/O 驱动将 mio 的 Poll 包装为与调度器集成的 Reactor,通过 Waker 机制在 fd 就绪时唤醒对应 task。定时器使用六级分层时间轮(每级 64 slot),所有操作 O(1)。同步原语(Mutex / channel / Semaphore)专为 async 设计,核心区别是等待时不阻塞线程。select! 宏是 tokio 最强大也最危险的组合器,理解其取消语义是正确使用的前提。
-
tokio(二):任务系统-spawn、取消与协作式调度
tokio::spawn 将一个 Future 包装为运行时调度的任务(task),任务是非抢占式的——它只在 .await 点主动让出执行权。tokio 通过 coop budget(128 次操作预算)实现软抢占,通过 JoinSet / TaskTracker 提供结构化并发,通过 drop JoinHandle 实现取消。理解任务生命周期是避免 tokio 大部分 pitfall 的关键。