我试图找出 Clojure 所称的 STM 与 Haskell 中实现的 STM 之间的区别。撇开实际的语言语义差异不谈,正如 Rich Hickey 在他的演讲中所说,Clojure 的 STM 实现与其他任何东西都非常不同,但我不理解除了语言选择之外的差异。
问问题
3419 次
3 回答
26
Clojure STM 有 3 大独特的功能:
- 实现 MVCC 快照,避免在读取失效时重新启动事务。
- 确保对读写的引用提供了一种对资源获取顺序的手动控制。
- 具有显式通勤,可减少对可交换写入的重试。
于 2010-12-30T08:46:03.437 回答
17
对于 Haskell STM,请参阅 SPJ 的论文:http ://research.microsoft.com/en-us/um/people/simonpj/papers/stm/
特别有用的是“可组合内存事务”和“具有数据不变量的事务内存”。GHC 的 STM 实现确实不是 MVCC。我不记得所有的实现细节,但我的理解是论文中的描述与 GHC 目前存在的描述并没有太大的不同。
(请注意,在 clojure 或其他地方,MVCC 使写入偏斜成为可能——参见,例如,这里:http ://en.wikipedia.org/wiki/Snapshot_isolation )
于 2010-12-31T02:23:08.217 回答