KDOC 474: Go言語による並行処理

この文書のステータス

  • 作成
    • <署名>
  • レビュー
    • <署名>

概要

『Go言語による並行処理』は、並行処理を解説する本である。

メモ

  • 並列性はランタイムの性質であって、コードの性質ではない(p24)
    • 並列で走ってほしいと考えて並行なコードを書いている
  • コードの結果を別のコードに共有したい場合、これはデータの所有権を移動していることになる。並行プログラムを安全にするには、一度に1つの並行処理のコンテキストのみがデータの所有権を持つようにする(p33)
  • 構造体の内部の状態を保護している場合はメモリアクセス同期を使うべきで、チャネルを使うべきではない(p34)
  • メモリアクセスするべきか、チャネルを使うべきかの判断基準がある
  • ゴルーチンは一時停止や再エントリーのポイントを定義していない。Goのランタイムはゴルーチンの実行時の振る舞いを観察して自動的に一時停止したり再開する(p38)
  • Goがゴルーチンを管理する機構はM:Nスケジューラという実装になっている。M個のグリーンスレッドをN個のOSスレッドに対応させる。ゴルーチンはグリーンスレッドにスケジュールされる(p39)
  • ゴルーチンは未来の任意のタイミングにスケジュールされる。ループ内でゴルーチンを発行していたら、順番に実行される保証はない
  • WaitGroupの使い方。
    • Add カウンタを増やす – 監視対象のゴルーチンの外で行う。いつゴルーチンが実行されるかはわからない。競合する可能性があるから
    • Done カウンタを減らす
    • Wait ゼロになるまでメインゴルーチンをブロック
  • Sync, Cond, WaitGroup, Once, Pool

関連

なし。