Monoio:字节跳动基于 io_uring 的 Rust 异步运行时入门指南
一、项目官方信息
| 项目 | 信息 |
|---|---|
| GitHub 仓库 | bytedance/monoio |
| Crate | crates.io/crates/monoio |
| 开源协议 | MIT/Apache-2.0 |
| 主要语言 | Rust |
| Star 数 | 约 5.1k |
Monoio 是字节跳动开源的 thread-per-core Rust 异步运行时,底层使用 io_uring(Linux)/epoll/kqueue。它在高并发场景下性能优于传统线程池调度模型,适合网络服务、数据库、中间件。

二、官方图片
上图为 Monoio 仓库在 GitHub 上的社交预览图。
三、环境要求
- Rust 1.75+;
- Linux 5.1+(推荐 io_uring);
- macOS/BSD 可用 kqueue 后端。
四、使用步骤
1. 添加依赖
[dependencies]
monoio = "0.4"
2. 写一个 Hello World
#[monoio::main]
async fn main() {
println!("Hello Monoio");
}
3. 启动多 worker
let runtime = monoio::RuntimeBuilder::new().worker_num(4).build().unwrap();
runtime.block_on(async {
println!("run in monoio");
});
4. TCP 回显示例
use monoio::net::TcpListener;
#[monoio::main]
async fn main() {
let listener = TcpListener::bind("0.0.0.0:8080").unwrap();
loop {
let (stream, _) = listener.accept().await.unwrap();
monoio::spawn(async move {
// handle stream
});
}
}
五、使用方法
- thread-per-core:减少跨核同步;
- io_uring:低延迟高吞吐 IO;
- 兼容 tokio API:迁移成本低;
- 多运行时:可建多个 worker;
- 生产验证:字节内部大规模使用。
六、常见问题 FAQ
-
Monoio 是什么? 基于 io_uring 的 thread-per-core Rust 异步运行时。
-
需要什么内核? Linux 5.1+ 推荐 io_uring。
-
和 tokio 比? 调度模型不同,高并发下吞吐更高,API 风格接近。
-
支持 macOS 吗? 支持,使用 kqueue 后端。
-
怎么定义 main? 用
#[monoio::main]宏。 -
谁在用? 字节内部大规模服务。
七、跳转链接
- GitHub 仓库:bytedance/monoio
- Crate:crates.io/crates/monoio
- 文档:docs.rs/monoio