标签: async
与该标签相关的所有文章 "async".
-
Rust 异步生态(总览):从 mio 到 axum 的分层架构
Rust 的异步网络栈是 mio → tokio → hyper → tower → axum 五层,每层职责单一、可独立替换。C++ Asio 把事件通知、调度、定时器、buffer、协程支持打包在一个库里。两种设计没有绝对优劣——Rust 的分层来自语言特性(ownership 使模块边界天然清晰),Asio 的一体化来自 C++ 生态的碎片化(没有统一运行时,不如自己全做)。
-
tower(一):Service trait-异步函数抽象与背压信号
tower::Service<Request> 把任何异步请求-响应操作抽象为一个 trait, 核心设计是 pollready + call 两步协议 -- 先问"你准备好了吗", 再发请求. pollready 的存在使得负载均衡器能探测下游容量, 实现真正的背压传播, 这是 tower 区别于其他中间件框架的根本设计决策.
-
hyper(一):底层 HTTP 实现与 1.0 迁移
hyper 是 Rust 生态中 HTTP/1.1 和 HTTP/2 的底层协议实现, 不是 Web 框架. 1.0 版本做了破坏性重构: 移除内置高层 Server/Client 到 hyper-util, Body 从具体类型变为 trait, 定义了自己的 Service trait (&self 而非 &mut self, 无 poll_ready). hyper 是 axum、reqwest、tonic 的底层引擎.
-
mio(四):为什么不直接用 mio
mio 刻意只做事件通知,不提供 timer、buffer 管理、async/await、任务调度。直接用 mio 写服务器代码就像用 epoll_wait 的 C 代码一样繁琐。tokio 在 mio 之上叠加了完整的异步运行时。这不是 mio 的缺陷——这是 Unix 哲学的 "do one thing well"。