ランタイムを読んで理解しよう

では、ついに実際の非同期ランタイムのコードをなるべく隅から隅まで解説していこうと思います。

今回読んでいくコードはasync-stdという Rust の非同期処理用ランタイムクレートです。このクレート(Rust ではライブラリのことをクレートと呼びます)はランタイムだけではなく、Rust の標準ライブラリ(std)を非同期にしたものでもあります。stdでは同期的だった File IO などを非同期化した関数群を提供するのがこのクレートの目的でもあります。本書ではランタイム部分しか触れませんが、一応これから読んでいくクレートの紹介を雑にしておこうと思いました。

注意事項ですが、今回読んでいくコードはasync-stdの master ブランチのものではなく、new-schedulerブランチのものになります。このブランチはまだ取り込まれていないため、本書で触れていくコードがasync-stdで今後使われていくか分かりません。現状、PR が出ている状態で、コードレビューや議論が行われている最中となっています。まえがきでもありましたが、再度new-schedulerブランチのコードを読んでいく理由を話します。new-schedulerブランチのランタイムを読む理由は、new-schedulerブランチのコードのほうが 1 つ 1 つのモジュールが疎結合になっており、コードが読みやすくなっているからです。また、ランタイムの動作が変更されたことやタスク実行方法がより効率的になっていることから、パフォーマンスも向上されています。そのため、new-schedulerブランチを読むほうが著者自身そして読者のみなさまの学びがあると判断しnew-schedulerブランチを読んでいくことにしました。(2020/02 時点での話)

それでは実際に非同期ランタイムを読んでいきましょう!