ホームRustbytedance/monoio
// archived 2026-04-14
bytedance

monoio

Backend#Rust#io_uring#Async#Networking#Runtime
GitHub で見る →
4,944

// 概要

Monoio は io_uring、epoll、kqueue を活用して効率的な I/O 操作を実現する thread-per-core な Rust 非同期ランタイムです。Work-stealing を回避することでタスクに Send や Sync の実装を要求せず、thread-local storage を安全かつ効率的に利用できます。このアーキテクチャは、スループットの最大化を主目的とする I/O バウンドなサーバーアプリケーションに最適化されています。

// 技術解説

Monoio は、 I/O バウンドなサーバーアプリケーション向けに設計された、高性能な thread-per-core 型の Rust async runtime です。 thread-per-core モデルを採用することで、タスクが Send や Sync である必要性を排除し、 thread-local storage の安全な利用を可能にするとともに、 work-stealing 型の runtime に伴うオーバーヘッドを回避します。 io_uring 、 epoll 、 kqueue といったネイティブな非同期 I/O API を活用してスループットを最大化しますが、この設計上の選択は汎用的な互換性よりもパフォーマンスを優先しています。

// 主要ハイライト

01
thread-per-core アーキテクチャを実装し、タスクが Send や Sync である必要性をなくすことで、 thread-local なデータの開発を簡素化します。
02
io_uring 、 epoll 、 kqueue をネイティブサポートし、 Linux や macOS 上で最大限の I/O スループットを実現します。
03
他の runtime 上で動作するのではなく、スタンドアロンの runtime として動作するため、より高い効率と低いオーバーヘッドを保証します。
04
ロードバランサーなど、ネットワーク I/O が主要なボトルネックとなるサーバーサイドのワークロードに最適化されています。
05
不安定な Rust の機能と独自の I/O 抽象化を利用し、既存の runtime を超えるパフォーマンスの限界を追求しています。

// ユースケース

01
高性能なネットワークサーバーおよびロードバランサー
02
ネイティブな非同期 I/O サポートを必要とする I/O バウンドなアプリケーション
03
スレッド間でのタスク移行よりも thread-local なデータアクセスが好まれるシステム

// クイックスタート

まず、 Rust 1.75 以降を使用していること、および Linux カーネルが io_uring (バージョン 5.6 以降) をサポートし、適切な memlock 設定が行われていることを確認してください。その後、プロジェクトに Monoio を追加し、 #[monoio::main] マクロを使用してエントリーポイントを定義します。提供されている TcpListener やストリームの抽象化を利用して、非同期ネットワークサービスを構築可能です。