ソフトウェアトランザクショナルメモリ
今回は 10 章を読みました。ソフトウェアトランザクショナルメモリ(STM)というものが出てきました。しばらく黙々と読みますが・・・。正直言ってなんだかよくわからない曖昧な感じの説明が続きます。
この本の全体的な傾向ですが、ところどころ曖昧なまま話が進んでしまうことがあります。概念的な説明と概念的なコードは出てくるのですが、抽象化された説明や具体化されたコードがわりと少ないような気がします。いや、動作するサンプルコードはたくさん用意されているのにこんなことを感じるのも不思議な話ですが・・・。単に僕の読解力がないだけにも思える。
まあそれはともかく、ソフトウェアトランザクショナルメモリについて僕がなんとなくイメージを持てたのは、実に 10.10 という 10 章の最後の方、まとめの直前のセクションでした。
- STM トランザクションは、トランザクション中の
readTVar
とwriteTVar
のログを蓄積する。 writeTVar
はすぐにメモリに適用しない。readTVar
はログを走査して、対象TVar
にwriteTVar
で書き込まれているかチェックする。- STM トランザクションの最後に、トランザクションのエフェクトがメモリに適用される。
要するに、メモリに対してデータベースのように振る舞う仕組みってことね。STM トランザクションって、データベースのトランザクションと同じことか。そんなイメージを持ってから 10 章をもう一度読み直すと、ちょっとは分かった気がしました。
それにしても、7 章から 9 章にかけてずっと扱ってきた MVar
が実はあんまりいいものじゃなかったというのは、なんだかちょっとがっかり感があります。結構付き合うのがめんどくさいやつだったのに・・・。
まあ良い。この本は、並列・並行プログラミングの概念を勉強するための本なのだ。少々まわりくどい場合もあるだろう。そんなものだ。
次回は 11 章を読みます。
余談
読書会中に少し脇道にそれて、別の話題で盛り上がることは時々あることです。それは別に悪いことではなく、むしろ楽しいことだと思います。今回は Scala の話や Python の話が出てきました。
おもしろいと思ったことのひとつが、Python のモジュール NumPy の話です。最近、技術計算などで Python が使われることが多い理由のひとつがこの NumPy らしいですね。まだあんまりわかってはいないですが、ちょっと勉強してみたい気がしました。
また、iPython notebook というのが便利そうだと思いました。あ、教えてくれた方はその名前で呼んでいましたが、今は名前が変わって Jupyter notebook になったのかな。学生時代に使っていた Mathematica を思い出しました。