並列並行本の読書会#5

毎月やってるHaskellの並列並行本の読書会行った。
partake.in
今回は9.6 非同期例外の捕捉のところから10章のSTM(ソフトウェアトランザクショナルメモリ)の話まで。STMはトランザクション中の更新は共有のメモリにすぐ反映しないので、トランザクションの破棄が簡単で、非同期例外を受けても、安全に再開できる。STMはいわゆる楽観ロックで実装されてるっぽい。書き込みのログだけじゃなくて読み込みのログも保持してて、トランザクションをコミットするタイミングで読み込んだデータが想定どおりか(誰も更新してないか)どうかをチェックして、問題なければコミットする。なのでトランザクション内での読み込みの変数が多いと性能が低下する。じゃあSTMとして束縛する単位を個々の要素ではなくリストにするかというとロックの粒度が変わるので、問題領域によってケースバイケース。