标签: mio
与该标签相关的所有文章 "mio".
-
Rust 异步生态(总览):从 mio 到 axum 的分层架构
Rust 的异步网络栈是 mio → tokio → hyper → tower → axum 五层,每层职责单一、可独立替换。C++ Asio 把事件通知、调度、定时器、buffer、协程支持打包在一个库里。两种设计没有绝对优劣——Rust 的分层来自语言特性(ownership 使模块边界天然清晰),Asio 的一体化来自 C++ 生态的碎片化(没有统一运行时,不如自己全做)。
-
tokio(一):运行时-从 mio 到异步运行时的完整设计
tokio 是 Rust 的异步运行时,提供工作窃取调度器、I/O 驱动、定时器、同步原语和任务管理。它在 Rust 异步生态中的角色等同于 Asio 的 iocontext + strand + timerqueue + 线程池的总和,但 Rust 选择了分层架构(mio → Future trait → tokio)而非 Asio 的单库大一统模式。理解 tokio 需要先理解它为什么不能只用 mio,以及 Rust async/await 的设计如何塑造了运行时的形态。
-
mio(七):陷阱与常见错误
mio 的 7 个致命陷阱:不 drain 数据导致事件丢失、不处理 WouldBlock、忘记 deregister 导致资源泄漏、reregister 的覆盖语义、跨 Poll 使用 Source、在 poll 线程做阻塞操作、忽略 EINTR。建在 mio 之上的抽象还有 3 个额外陷阱。所有这些都源于 mio 的核心设计决策:边缘触发 + 非阻塞 + 手动管理。
-
mio(六):代码示例-TCP Echo Server
mio 官方提供的 TCP server 示例约 130 行,展示了手动事件循环的完整模式:Token 分发、WouldBlock 处理、edge-triggered drain、连接池管理。同样的功能用 tokio 约 15 行。这个对比不是在批评 mio——它精确地展示了 mio 的定位:它是操作系统事件通知的薄封装,不是应用框架。