HaskellのSTMとトランザクション分離レベル

Haskellのatomicブロックがserializableな分離レベルを提供してる所まではわかったけれど、その効率的な実装には謎が残るばかり。
8
Hideyuki Tanaka @tanakh

Concurrent Revisionsで書かれたサンタさん読んでるけど、すごいですね。

2011-09-22 15:04:34
Hideyuki Tanaka @tanakh

そろそろみんなロックとか条件変数のことは忘れてもいいと思う(´・_・`)・・・

2011-09-22 15:05:26
Hideyuki Tanaka @tanakh

Concurrent Revisionsはロックもしなければロールバックもしない。適切なマージ関数を記述させるのと、リビジョンツリーの形に制限を与えるのがキモ

2011-09-22 15:09:33
くまぎ @kumagi

HaskellはC++より高速とか謳いながらSTMだったりしてるし、そのSTMはlock-freeとデカデカと書いておきながら実装では堂々とmutex使ってるしで、パフォーマンスを捨てたいのか手に入れたいのかよくわからない。

2011-09-22 15:14:44
Hideyuki Tanaka @tanakh

ロックフリーの実装にロック使うのがなんで良くないのか…? RT @kumagi: HaskellはC++より高速とか謳いながらSTMだったりしてるし、そのSTMはlock-freeとデカデカと書いておきながら実装では堂々とmutex使ってるしで、パフォーマンスを捨てたいのか手に入

2011-09-22 15:15:35
くまぎ @kumagi

@tanakh mutex-freeとlock-freeは意味が違います。

2011-09-22 15:16:18
Hideyuki Tanaka @tanakh

@kumagi mutex-freeという意味ではないと思います

2011-09-22 15:16:49
くまぎ @kumagi

@tanakh 進行保証のない、ブロッキングするSTMの事を通常はlock-freeと呼ばないのです。

2011-09-22 15:17:36
くまぎ @kumagi

lock-freeというのは「これでプログラム中にlockとかunlockとか明記しなくても良くなったぜー!」というノリで付けた名前だろうか。lock-freeなlock-based STM。

2011-09-22 15:23:13
Hideyuki Tanaka @tanakh

解決したい問題が違うんでしょうね。ロックで問題になることは、ロックを使うことではないので。

2011-09-22 15:21:51
Hideyuki Tanaka @tanakh

多分Concurrent Revisionsで解決したい問題は、STMで生じた問題でしょう。

2011-09-22 15:22:50
Hideyuki Tanaka @tanakh

じゃあConcurrent Revisionsでは問題はすべて解決されるのか?というと、やっぱりそうではなくて。

2011-09-22 15:23:30
Hideyuki Tanaka @tanakh

多分書けるアプリケーションの幅を絞ってそれらを解決しようとしているのだろう。

2011-09-22 15:24:07
Hideyuki Tanaka @tanakh

噛み合ってないのは自分でもわかってるが、何をどう言えばいいのか。

2011-09-22 15:25:32
Hideyuki Tanaka @tanakh

というか、STMは高速化を目指したものではないのですね…。圧倒的な記述力をテに入れた代償に速度が遅くなるのをどうやって解決するかって、みんなが努力している類のものです。

2011-09-22 15:26:56
くまぎ @kumagi

@tanakh STMで生じた問題…というのは、ゾンビトランザクションでしょうか?それとも速度的な…?

2011-09-22 15:24:03
Hideyuki Tanaka @tanakh

@kumagi 速度的な問題とか、それと実装が困難とかでしょうか。

2011-09-22 15:24:29
くまぎ @kumagi

@tanakh 実装の困難さも問題になってたんですね…

2011-09-22 15:30:05
Hideyuki Tanaka @tanakh

@kumagi はい。STMの実装は実に様々なものが提案されていますし、シンプルかつ高性能なものは僕は知りません。

2011-09-22 15:31:58
Hideyuki Tanaka @tanakh

STMが実装に"lock"を使うというのも別になんというか、唯の一つのオプションに過ぎないので、それをもって云々というのは、なんかあれですねえ

2011-09-22 15:33:37
くまぎ @kumagi

@tanakh なるほど。ところでHaskellはSTMのトランザクション分離レベルに要求が有るんでしょうか?read-committedがNGだったら効率良く実装できるトランザクションの種類が激減すると思うのです。

2011-09-22 15:36:20
Hideyuki Tanaka @tanakh

@kumagi それは可能だと思います。STMのセマンティクスとしては、直列化した時と同じ挙動をする限りどう実行しても良いというものなはずなので。

2011-09-22 15:40:25
kumagi @kumagi_bot

lock-basedでありながらread-repeatable分離レベルとマルチリーダーを実現したSTMはHaskell界にも無いと思うというか、lock-free STMというキャッチーな響きに心踊らせて論文開いたらずっとHaskellの話だった心境をですね…!!

2011-09-22 15:41:40
くまぎ @kumagi

@tanakh 直列化した時と同じ挙動をする、というのはread-commitedな分離レベルでは不可能です、read-repeatableでないと。serializableな分離レベルというのは、STMにかける制約としては最強のモノとなるので、実装が限られます。

2011-09-22 15:44:27