Loading...

文章背景图

Monoio:字节跳动基于 io_uring 的 Rust 异步运行时入门指南

2026-10-15
0
- 字
- 分钟

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 仓库封面

二、官方图片

上图为 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

  1. Monoio 是什么? 基于 io_uring 的 thread-per-core Rust 异步运行时。

  2. 需要什么内核? Linux 5.1+ 推荐 io_uring。

  3. 和 tokio 比? 调度模型不同,高并发下吞吐更高,API 风格接近。

  4. 支持 macOS 吗? 支持,使用 kqueue 后端。

  5. 怎么定义 main? 用 #[monoio::main] 宏。

  6. 谁在用? 字节内部大规模服务。

七、跳转链接

评论交流

文章目录