tokio
rust-lang のデファクト非同期ランタイム。I/O駆動のタスクスケジューリングを提供する。
主要機能
- spawn:
tokio::spawn(async move { ... })でタスクを生成し、JoinHandleを.awaitで待つ。 - チャネル:
mpsc(MPSC = multi-producer single-consumer)、broadcast(multi-producer multi-consumer)、watch(single-producer multi-consumer)。メッセージパッシングは inter-process-communication の系列。 - Stream:
stream::unfoldなどで非同期イテレーションを扱う。 - Mutex:
tokio::sync::Mutexは.await境界を跨げるが重い。std::sync::Mutexのガードを.await越しに保持するとSend制約で弾かれる(parking_lotも選択肢)。
関連
- 非同期の言語仕様(Future/Pin)は rust-ownership-model と Rust async を参照。
- イベントループの源流として、Node.js の libuv(Node.js のために作られたイベントループライブラリ)がある。
- gRPC サーバ実装などネットワークアプリの土台になる。
関連: _moc-systems / rust-lang