並行コンピューティング技法 を読んだ

内容は、逐次処理しか書いたことない人が読むことを想定していて並列化って怖いんでしょ?あたりから書いてあってとてもよかった。
ただ、用語が固いという印象を受けてなかなか頭に入ってこないというのは一部あった。

並列プログラミングモデル

プロセスがメモリ空間を共有している

  • 同時にメモリの書き換えが起きる可能性があるので排他制御が必要になる
  • 排他制御がボトルネックになる可能性がある

プロセスがメモリ空間を共有してない

  • プロセス間の通信が必要
  • プロセス毎にメモリを確保するのでメモリを消費が大きい

数値計算と1タスク

並行処理したい対象は、大きく分けるとデータとタスクに分類できる。
タスクは、HTTPリクエストを投げたり1つに完結している仕事を指す。並列化しやすい。
データというのは、数値計算のことを指していて、並列化をしたところで高速化が難しい。
アルゴリズムの並列化についていくつか例が書いてあったが、並列で一時計算を行なって合計してから並列化で計算したりしていた。
数値計算の高速化が難しい理由にスレッドの待ちと生成のオーバーヘッドもあると書いてあった。

まとめ

この本に書いていることは特定のプログラミングに寄った話ではなくて、プログラミング言語に当てはまる内容だと思う。
特定の言語での並列化方法やLinuxのpthreadの使い方にも触れており、何に注意して並列するかということがわかった。
ソート処理の逐次処理を並列化する章周辺は難しかったがWEBシステムだとたぶん使う機会ほとんどないんじゃないかな。

crubyだとスレッドを使う場合は実質1つのスレッドだけアクティブになっているので明示的な排他制御は不要、あたりの話がなるほど〜という気持ちになった。
また、rubykaigi2016でギルドの話についてもなるほど〜と思えたので読んで損なしだと思っている。
自分のコードに幅がでるので是非オススメ。