HaskellのSTMとトランザクション分離レベル
Concurrent Revisionsはロックもしなければロールバックもしない。適切なマージ関数を記述させるのと、リビジョンツリーの形に制限を与えるのがキモ
2011-09-22 15:09:33HaskellはC++より高速とか謳いながらSTMだったりしてるし、そのSTMはlock-freeとデカデカと書いておきながら実装では堂々とmutex使ってるしで、パフォーマンスを捨てたいのか手に入れたいのかよくわからない。
2011-09-22 15:14:44ロックフリーの実装にロック使うのがなんで良くないのか…? RT @kumagi: HaskellはC++より高速とか謳いながらSTMだったりしてるし、そのSTMはlock-freeとデカデカと書いておきながら実装では堂々とmutex使ってるしで、パフォーマンスを捨てたいのか手に入
2011-09-22 15:15:35lock-freeというのは「これでプログラム中にlockとかunlockとか明記しなくても良くなったぜー!」というノリで付けた名前だろうか。lock-freeなlock-based STM。
2011-09-22 15:23:13じゃあConcurrent Revisionsでは問題はすべて解決されるのか?というと、やっぱりそうではなくて。
2011-09-22 15:23:30というか、STMは高速化を目指したものではないのですね…。圧倒的な記述力をテに入れた代償に速度が遅くなるのをどうやって解決するかって、みんなが努力している類のものです。
2011-09-22 15:26:56@kumagi はい。STMの実装は実に様々なものが提案されていますし、シンプルかつ高性能なものは僕は知りません。
2011-09-22 15:31:58STMが実装に"lock"を使うというのも別になんというか、唯の一つのオプションに過ぎないので、それをもって云々というのは、なんかあれですねえ
2011-09-22 15:33:37@tanakh なるほど。ところでHaskellはSTMのトランザクション分離レベルに要求が有るんでしょうか?read-committedがNGだったら効率良く実装できるトランザクションの種類が激減すると思うのです。
2011-09-22 15:36:20@kumagi それは可能だと思います。STMのセマンティクスとしては、直列化した時と同じ挙動をする限りどう実行しても良いというものなはずなので。
2011-09-22 15:40:25lock-basedでありながらread-repeatable分離レベルとマルチリーダーを実現したSTMはHaskell界にも無いと思うというか、lock-free STMというキャッチーな響きに心踊らせて論文開いたらずっとHaskellの話だった心境をですね…!!
2011-09-22 15:41:40@tanakh 直列化した時と同じ挙動をする、というのはread-commitedな分離レベルでは不可能です、read-repeatableでないと。serializableな分離レベルというのは、STMにかける制約としては最強のモノとなるので、実装が限られます。
2011-09-22 15:44:27