『Go言語で学ぶ並行プログラミング』( James Cutajar:著 柴田芳樹:訳 インプレス)、読了。
Go言語は並行処理を書きやすいとされているようですが、わたしはあまり書いたことがありません。これまではあまり必要を感じていなかったというのもありますが、ややこしくてねぇ、並行処理・・・。処理間の通信手段として用意されているチャネルも、使い方が今一つ理解しにくくて。
とはいえ、せっかく Go言語を学んでいてその得意とする分野について見ないフリというもちょっと情けなく。わりと意欲、低めで読み始めました。
中身、濃いです。
最初の第1・2章ではなぜ並行処理が必要とされるのか、プロセスとスレッド、そしてゴルーチンの特徴といったところの解説から入っていきます。早く実践的なコードの書き方を知りたい人からするとまどろっこしいかもしれないですが、わたしはおもしろかったです。特にプロセスやスレッドとゴルーチンはどう違うのか、というところをちゃんと説明している本って案外ないもので、知りたかったのでありがたかったです。そうしたOS寄りのところまで意識しないと、うまく並行処理を書けないってことでもあるんだろうと思います。
以降、単純なメモリ共有を使った並行処理と競合の問題から始まって、ミューテックスを使った同期、セマフォの解説、チャネルの使い方の基礎から応用、処理パターンの検討やデッドロックの対処といったところまで、みっちり内容、つまってます。読むのは大変ですが、得られるものはそれに見合うと思います。
各章末に用意されている練習問題はちゃんとやりましよう。めんどくさいですが、やるとやらないとでは理解度が違ってくると思います。
翻訳者が同じ『Go言語 100Tips』同様、Go言語関係として非常に有用な本です。並行処理を書くなら手元に置いておきたい1冊です。