Async Rust

―高いパフォーマンスと安全性を両立するRustによる非同期処理

[cover photo]
TOPICS
Programming
発行年月日
PRINT LENGTH
284
ISBN
978-4-8144-0118-5
原書
Async Rust
FORMAT
Print
Print
4,180円

ネットワークアプリケーションの複雑化により、数千から数万のネットワーク処理を並行して処理することが求められるようになりました。OSが提供するスレッドでも並行処理は実装可能ですが、オーバーヘッドが大きいためこの規模の並行性を実現することは困難です。このため、プロセス内部で複数のタスクをスケジューリングすることで並行性を実現する非同期機構の採用が、さまざまな言語で進んでいます。Rustのasync/awaitによる非同期機構はその1つで、async/awaitによる簡潔でわかりやすい記述をコンパイラが状態遷移マシンに書き換えることで、スタックを使用しない低コストな非同期実行を実現しています。本書は、async/await機構の実装を通じてその仕組みを理解し、代表的な活用方法をマスターできる構成となっています。

目次

訳者まえがき
まえがき

1章 非同期プログラミング入門
    1.1 非同期(async)とは
    1.2 プロセスの紹介
    1.3 スレッドとは
    1.4 どのような場合に非同期コードを使うべきか
        1.4.1 ファイルI/Oでの非同期の使用
        1.4.2 非同期を用いてHTTPリクエストの性能を向上させる
    1.5 まとめ

2章 非同期Rustの基本
    2.1 タスクの理解
    2.2 フューチャ
        2.2.1 フューチャのピン留め
        2.2.2 フューチャのコンテクスト
    2.3 外部からフューチャを起こす
    2.4 フューチャ間でのデータの共有
        2.4.1 高レベルなフューチャ間でのデータ共有
        2.4.2 フューチャ処理の様子
    2.5 すべてをまとめる
    2.6 まとめ

3章 非同期キューの自作
    3.1 非同期キューの自作
    3.2 ワーカ数とキューを増やす
    3.3 タスクを複数のキューに渡す
    3.4 タスクスティーリング
    3.5 spawn_task関数のリファクタリング
    3.6 joinマクロの自作
    3.7 ランタイムの設定
    3.8 バックグラウンドプロセスの実行
    3.9 まとめ

4章 自作非同期ランタイムへのネットワークの統合
    4.1 エグゼキュータとコネクタを理解する
    4.2 自作非同期ランタイムへのhyperの統合
    4.3 HTTPコネクションの作成
    4.4 TokioのAsyncReadトレイトの実装
    4.5 TokioのAsyncWriteトレイトの実装
    4.6 コネクトとクライアントの実行
    4.7 mioの導入
        4.7.1 フューチャでのソケットのポーリング
        4.7.2 ソケットを用いたデータ送信
    4.8 まとめ

5章 コルーチン
    5.1 コルーチン入門
        5.1.1 コルーチンとは
        5.1.2 なぜコルーチンを使うのか
    5.2 コルーチンを用いたジェネレータ
        5.2.1 Rustにおける簡単なジェネレータの実装
        5.2.2 コルーチンの組み合わせ
        5.2.3 コルーチンからコルーチンを呼び出す
    5.3 コルーチンを用いた非同期挙動の模擬
    5.4 コルーチンの制御
    5.5 コルーチンのテスト
    5.6 まとめ

6章 リアクティブプログラミング
    6.1 基本的なリアクティブシステムの構築
        6.1.1 サブジェクトの定義
        6.1.2 表示オブザーバの作成
        6.1.3 ヒータオブザーバと熱損失オブザーバの作成
        6.1.4 コールバックによるユーザ入力の取得
    6.2 イベントバスによるブロードキャストの実現
        6.2.1 イベントバス構造体の自作
        6.2.2 イベントバスハンドルの自作
        6.2.3 自作イベントバスに非同期タスクを用いてアクセスする
    6.3 まとめ

7章 Tokioのカスタマイズ
    7.1 ランタイムの構築
    7.2 ローカルプールを用いたタスクの処理
    7.3 スレッドデータをunsafeに取得する
    7.4 行儀の良いシャットダウン
    7.5 まとめ

8章 アクタモデル
    8.1 基本的なアクタの構築
    8.2 アクタ vs mutex
    8.3 ルータパターンの実装
    8.4 アクタの状態回復の実装
    8.5 アクタスーパバイザの作成
    8.6 まとめ

9章 デザインパターン
    9.1 独立したモジュールの作成
    9.2 ウォーターフォールパターン
    9.3 デコレータパターン
    9.4 状態マシンパターン
    9.5 リトライパターン
    9.6 サーキットブレーカパターン
    9.7 まとめ

10章 外部ライブラリに依存しない非同期サーバの構築
    10.1 基本設定
    10.2 標準非同期ランタイムの自作
        10.2.1 ウェイカの自作
        10.2.2 エグゼキュータの自作
        10.2.3 エグゼキュータの実行
        10.2.4 センダの自作
        10.2.5 レシーバの自作
        10.2.6 スリープの自作
    10.3 サーバの自作
        10.3.1 リクエストの受け付け
        10.3.2 リクエストの処理
    10.4 非同期クライアントの自作
    10.5 まとめ

11章 テスト
    11.1 基本的な同期テスト
    11.2 非同期コードのモッキング
    11.3 デッドロックのテスト
    11.4 データ競合のテスト
    11.5 チャネル容量のテスト
    11.6 ネットワークによるやり取りのテスト
    11.7 細粒度のフューチャテスト
    11.8 まとめ

索 引