
『なっとく!並行処理プログラミング』の感想
はじめに
以下の本を読了したので感想をまとめます。
どんな本?
並行処理プログラミングについて基礎から学ぶ本です。目次構成は以下のとおりです。
Part 1 タコのオーケストラ:並行処理の交響曲
Chapter 1 並行処理
Chapter 2 直列実行と並列実行
Chapter 3 コンピュータの仕組み
Chapter 4 並行処理の構成要素
Chapter 5 プロセス間通信
Part 2 並行処理の3本の触手:マルチタスク、分解、同期
Chapter 6 マルチタスク
Chapter 7 分解
Chapter 8 並行処理問題の解決:競合状態と同期
Chapter 9 並行処理問題の解決:デッドロックと飢餓状態
Part 3 非同期のタコ:並行処理でピザを作ろう
Chapter 10 ノンブロッキングI/O
Chapter 11 イベントベースの並行処理
Chapter 12 非同期通信
Chapter 13 並行処理アプリケーションを作成する
ざっくり言うと、Part 1が基礎理論編、Part 2が実践編、Part 3が応用編といった構成となっています。
過去に並行処理プログラミングについて勉強したことがあれば、Part 2までは割とスラスラ読めるはず。Part 3から急に難易度が上がります。イベントループの実装からノンブロッキングな非同期処理サーバーの実装までを、専用のライブラリは用いずに一から実装していくという題材です。脳にかかる負荷がかなり高いです。
並行処理ってあっちこっち行ったり来たりするので、わけわかんなくなりますよね。。yieldを使ったGeneratorの挙動とか、毎回混乱してしまいます。
とまぁ難易度は高いんですけれど、イベントループを自前で実装したことがある人は少ないと思うので、興味のある方にはとても参考になるのではないでしょうか。
誰に薦めるか?
一般的なアプリケーション開発において、この本に書かれたレベルでの並行処理プログラムを書く機会はほぼないでしょう。ロックの取得とかを実装させるとたいていバグるので、最近のプログラミング言語や処理系では別の手段が提供されています(async〜await構文や、Promiseなど)。
アーキテクトが担当する共通基盤機能でも、低レベルな排他処理を記述することは多くありません。ただし、トラブルシューティングの場面においては本書に書かれている知識が必要となってくると思います。
アーキテクトを目指す人は本書を読んでおいて損はないと思います。また、とくかくプログラミングが好きという方にとっても楽しめる本ではないかと思います。
注意点
全体的には良い本だと思うのですが、いくつか注意が必要な箇所があるので挙げておきます。
サンプルはPythonで書かれています。僕のようにPythonに慣れていない人にとってはクセが強く、引っかかる箇所があります。
グローバル変数が使用されがちで、「この変数何だっけ?」と悩むことが多かったです。
サンプルコードの解説が少なく、読者のコードリーディング力が問われます。
サンプルコード内の命名や、解説文に疑義がある箇所が散見されました。
訳註がほとんどないです(僕だったら結構の訳註を入れると思う)。
PythonということはLLMが最も得意な言語とも言えるので、生成AIにコードを説明させるのは読解する上で非常に役立ちました。その辺りはZennの以下の記事にまとめています。
最後に、もしこれからこの本を読む方がいたら、とくに以下のサンプルコードには気をつけてください。
12.4節のサンプルコード:cook()とcashier()がコルーチンと書かれていますが、コルーチンにはなってないです。コールバックを即実行するのでFutureオブジェクトも即doneになります。余り意味のないサンプルなので読み飛ばしてもOK。
13.4節のサンプルコード:標準のasyncioライブラリを使い始めるのですが、このライブラリの仕様について一切説明がありません。自分で調べながら読むしかないです。
いいなと思ったら応援しよう!
