技術メモ

技術メモ

ラフなメモ

Go言語による並行処理の点検読書

Go言語による並行処理

Go言語による並行処理

全体として何に関する本か、何がどのように詳しく述べられているか

Goでの並行処理に関する情報を提供する書籍

  • Goでの並行処理の使い方
  • システムに導入する際のベストプラクティスとパターン
  • Goの並行処理の内部構造

1章 並行処理入門

並行性の概念の重要性を歴史的な観点から整理し、また、並行処理の難しさについて議論している。Goが並行性についてどのような立場をとっているかを簡単に説明する。

2章 並行性をどうモデル化するか:CSPとは何か

Go自体の設計に影響を与えた課題を考える。

3章 Goにおける並行処理の構成要素

Goの並行性のプリミティブの掘り下げ。

4章 Goでの並行処理パターン

Goの並行処理のプリミティブを組み合わせた便利なパターンの書き方の紹介。

5章 大規模開発での並行処理

大規模システムへの応用。

6章 ゴルーチンとGoランタイム

Goのランタイムがどのようにゴルーチンをスケジューリングしているかの紹介。

目次

1章 並行処理入門
    1.1 ムーアの法則、Webスケール、そして私たちのいる混沌
    1.2 なぜ並行処理が難しいのか
        1.2.1 競合状態
        1.2.2 アトミック性
        1.2.3 メモリアクセス同期
        1.2.4 デッドロック、ライブロック、リソース枯渇
        1.2.5 並行処理の安全性を見極める
    1.3 複雑さを前にした簡潔さ

2章 並行性をどうモデル化するか:CSPとは何か
    2.1 並行性と並列性の違い
    2.2 CSPとは何か
    2.3 これがどう役に立つのか
    2.4 Goの並行処理における哲学

3章 Goにおける並行処理の構成要素
    3.1 ゴルーチン(goroutine)
    3.2 syncパッケージ
        3.2.1 WaitGroup
        3.2.2 MutexとRWMutex
        3.2.3 Cond
        3.2.4 Once
        3.2.5 Pool
    3.3 チャネル(channel)
    3.4 select文
    3.5 GOMAXPROCSレバー
    3.6 まとめ

4章 Goでの並行処理パターン
    4.1 拘束
    4.2 for-selectループ
    4.3 ゴルーチンリークを避ける
    4.4 orチャネル
    4.5 エラーハンドリング
    4.6 パイプライン
        4.6.1 パイプライン構築のためのベストプラクティス
        4.6.2 便利なジェネレーターをいくつか
    4.7 ファンアウト、ファンイン
    4.8 or-doneチャネル
    4.9 teeチャネル
    4.10 bridgeチャネル
    4.11 キュー
    4.12 contextパッケージ
    4.13 まとめ

5章 大規模開発での並行処理
    5.1 エラー伝播
    5.2 タイムアウトとキャンセル処理
    5.3 ハートビート
    5.4 複製されたリクエスト
    5.5 流量制限
    5.6 不健全なゴルーチンを直す
    5.7 まとめ

6章 ゴルーチンとGoランタイム
    6.1 ワークスティーリング
        6.1.1 タスクと継続、どちらを盗むのか
    6.2 すべての開発者にこの言葉を贈ります
    6.3 結論

この本を読んで達成したいことは何か

一般的に並行処理を考える際にどのようなパターン/概念があるのかを知りたい。パターン/概念をGoで実装できるようになりたい。