| 原作者 | カール・レルチェ |
|---|---|
| 初回リリース | 2020年12月23日 |
| 安定版リリース | 1.41.1 [1]
|
| リポジトリ |
|
| 書かれた | さび |
| オペレーティング·システム | macOS、Windows、Linux、FreeBSD、WebAssembly |
| タイプ | 非同期ランタイム |
| ライセンス | MITライセンス |
| Webサイト | トキオ |
TokioはRustプログラミング言語用のソフトウェアライブラリです。非同期I/Oの使用を可能にするランタイムと関数を提供し、タスク完了に関する並行性を実現します。[2] [3] [4]
Tokio は、汎用プログラミング言語Rust 向けに 2016 年 8 月にリリースされました。Carl Lerche によって開発された Tokio は、ネットワーク アプリケーション フレームワークとして始まり、ソケット リスニングやブロードキャストなどの機能をサポートし、コンピューター間でメッセージを転送できるようにします。
歴史
Tokio は、2016 年 8 月に Carl Lerche によって Rust 用のネットワーク アプリケーション フレームワークとして開始されました。これはfutures上に構築され、ネットワークベースのミドルウェアと、リアクターに対する準備関心の非ブロッキング(非同期) 実装を可能にします。Tokio は、Twitter でJava 仮想マシン(JVM) 用に開発されたScalaベースの非同期リモート プロシージャ コール(RPC) システムである Finagle に触発され、分散システムが JVM 内で通信できるようになりました。Tokio は、epoll ( Linux )、kqueue ( FreeBSD )、入出力完了ポート(IOCP) API ( Windows )などのシステム コールを使用する、より低レベルの Rust クレートを活用します。Linux では、 tokio-uring を介してio_uringを使用することもできます。 [5] [6] [7]「Tokio」という名前は、Tokyoと mio に由来しています。[8] Tokioの予備バージョンは2017年1月にリリースされ、[9] 2020年12月に完全版がリリースされました。[10] [11] 2017年、TokioはMozillaオープンソースサポート基金から助成金を受けました。[12] 2021年4月、Tokioはプロジェクトの開発とユーザー支援の両方に尽力した最初の有償貢献者であるアリス・ライルに資金を提供しました。[13] [14]mio
Rustは2019年11月にリリースされたバージョン1.39以降、非同期関数をサポートしていますが、[15]非同期関数を実行するための機能は提供されておらず、そのためには外部ランタイムが必要です。[16] Tokioは、マルチスレッドのワークスティーリングスケジューラを使用するランタイムを提供します。[10] Rustのフューチャーは遅延評価さ.awaitれるため、関数は作業を行う前に呼び出す必要があります。 [17]が呼び出されると.await、Tokioのランタイムは元のフューチャーをI/Oが完了するまで一時停止し、さらに処理する準備ができている別のタスクの一時停止を解除する場合があります。[18]
Tokioのユーザーには、 DiscordやAWS Lambdaの開発チームが含まれます。[10] JavaScriptおよびTypeScriptランタイムDenoは、libuvライブラリを使用するJavaScriptランタイムNode.jsとは対照的に、内部的にTokioを使用しています。[19]
特徴
非同期コード
Tokioは、非同期ランタイムを作成することで、Rustで非同期関数を使用できるようにします。これは#[tokio::main] マクロを通じて実現できます。[18]
例えば:
#[tokio::main]
async fn main () -> Result < () > { let url = "https://en.wikipedia.org/" ; let text = reqwest :: get ( url ). await ? . text (). await ? ; println! ( "{}" , text ); Ok (()) }
この例では、クレートは英語版 Wikipediaのハイパーテキスト マークアップ言語(HTML)をreqwest要求するために使用されます。要求がすぐに処理されないようにするために、Tokio は関数呼び出しを非同期ランタイムにラップし、要求が完了するまで待ってから を呼び出します。
println()
Tokio には、非同期で使用するために設計された Rust 標準ライブラリのバージョンも含まれています。たとえば、tokio::fs::read_to_end()ファイルの内容を読み取る は、 の非同期バージョンですstd::fs::read_to_end()。[20]さらに、Tokio は、という別のクレートで、Linux 非同期 I/O システムコール インターフェースであるio_uring をtokio-uringサポートしています。[10] [21]
コルーチンモデル
Tokioではさらに、関数を使用してスタックレスコルーチンであるタスクを作成することができますtokio::spawn()。タスクはユーザーレベルで実行され、スレッドが1つしかない場合でも並行性を実現します。[22]
ソケットリスニング
Tokioは非ブロッキングアプローチを通じてソケットをリッスンすることができます。[5]特に、このTcpListener構造は伝送制御プロトコル(TCP)ソケットリスナーをアドレスにバインドし、関数を非同期的に実行します。[23]
放送
Tokioはブロードキャストチャネルタイプを提供しており、メッセージを複数の受信者にブロードキャストすることができます。メッセージを送信すると、そのメッセージは受信者によって受信されます。これにより、リアルタイム通信や分散システムなどのアプリケーションが可能になります。[24]
参考文献
- ^ “リリース 1.41.1”. 2024年11月7日. 2024年12月1日閲覧。
- ^ Chanda, Abhishek (2018). Rust によるネットワークプログラミング: Rust のメモリ安全性と並行性機能を活用して、高速で回復力のあるネットワークサーバーとクライアントを構築します。バーミンガム: Packt Publishing。ISBN 978-1-78862-171-7. OCLC 1028194311.
- ^ Sharma, Rahul (2019). Mastering Rust : メモリ安全性、型システム、並行性、および Rust 2018 版の新機能について学習します。Vesa Kaihlavirta (第 2 版). バーミンガム、イギリス。ISBN 978-1-78934-118-8. OCLC 1090681119.
{{cite book}}: CS1 メンテナンス: 場所が見つかりません 発行者 (リンク) - ^ De Simone, Sergio (2021-01-06). 「Rust 非同期ランタイム Tokio が 1.0 に到達」。InfoQ。2021年 11 月 21 日閲覧。
- ^ ab Lerche、カール (2016 年 8 月 3 日)。 「トキオのアナウンス」。2022 年12 月 11 日に取得。
- ^ 「Finagle: プロトコルに依存しない RPC システム」。2011 年 8 月 19 日。2022年12 月 11 日閲覧。
- ^ Gomez, Guillaume; Boucher, Antoni (2018). Rust Programming By Example: 魅力的で並行性があり、リアクティブで堅牢なアプリケーションを構築して Rust の世界に入りましょう。バーミンガム: Packt Publishing. ISBN 9781788470308。
- ^ Lerche, Carl (2016年8月3日). 「東京という街を訪れて楽しかったし、"io"という接尾辞とそれがMioとどのように関係しているかも気に入った。よく分からない…名前をつけるのは難しいので、あまり時間をかけて考えなかった」Reddit . 2022年12月11日閲覧。
- ^ カール、レルチェ;アレックス・クライトン。トゥロン、アーロン。 「Tokio 0.1の発表」。2022 年12 月 11 日に取得。
- ^ abcd Krill, Paul (2021-01-08). 「Tokio Rust ランタイムが 1.0 ステータスに到達」。InfoWorld。2021年 9 月 3 日閲覧。
- ^ レルチェ、カール。 「Tokio 1.0を発表」。2022 年12 月 11 日に取得。
- ^ 「Mozilla、MOSSの一環としてオープンソースプロジェクトに36万5000ドルを授与」LWN.net 2021年11月21日閲覧。
- ^ 「アリス・ライルを Tokio初の有償寄稿者として迎える」。Tokio . 2021年11月28日閲覧。
- ^ Allen Wyma (2021年11月12日). 「Tokio Ecosystem with Alice Ryhl」. Rustacean Station (ポッドキャスト) . 2021年11月26日閲覧。
- ^ 「Rust 1.39 でゼロコストの async/await サポートが実現」InfoQ . 2021 年 11 月 28 日閲覧。
- ^ 「非同期エコシステム」。Rustでの非同期プログラミング。2021年 11 月 28 日閲覧。
- ^ Matsakis, Niko (2019-11-07). 「安定した Rust での async-await!」Rust ブログ. 2021-11-28閲覧。
- ^ ab “Hello Tokio”. Tokio . 2021年11月28日閲覧。
- ^ Rappl Moraza、Florian (2022)。Node.js による最新のフロントエンド開発: Node.js エコシステム内での最新の JavaScript Web 開発の概要。バーミンガム、英国。ISBN 9781804617380。
{{cite book}}: CS1 メンテナンス: 場所が見つかりません 発行者 (リンク) - ^ “I/O”.東京. 2022年12月11日閲覧。
- ^ 「tokio-uringの発表:Tokioのio-uringサポート」。Tokio 。2021年11月28日閲覧。
- ^ Sintes, Tony (2001年4月13日). 「Four for the years」. InfoWorld . 2023年1月5日閲覧。
- ^ Eguia Moraza、Iban (2018)。Rust ハイパフォーマンス: Rust アプリケーションのパフォーマンスを飛躍的に向上させる方法を学ぶ。バーミンガム、イギリス。ISBN 978-1-78847-823-6. OCLC 1033544275.
{{cite book}}: CS1 メンテナンス: 場所が見つかりません 発行者 (リンク) - ^ ブランディ、ジム;オレンドフ、ジェイソン。ティンダル、レオナラ(2019)。 Rustのプログラミング。セバストポル。ISBN 9781492052548。
{{cite book}}: CS1 メンテナンス: 場所が見つかりません 発行者 (リンク)
外部リンク
- 公式サイト
- GitHub上の Tokio
- crates.io の Tokio
