32

我试图找出 Clojure 所称的 STM 与 Haskell 中实现的 STM 之间的区别。撇开实际的语言语义差异不谈,正如 Rich Hickey 在他的演讲中所说,Clojure 的 STM 实现与其他任何东西都非常不同,但我不理解除了语言选择之外的差异。

4

3 回答 3

26

Clojure STM 有 3 大独特的功能:

  1. 实现 MVCC 快照,避免在读取失效时重新启动事务。
  2. 确保对读写的引用提供了一种对资源获取顺序的手动控制。
  3. 具有显式通勤,可减少对可交换写入的重试。
于 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 回答
13

Mark Volkmann 在 Strange Loop 2009 上对 STM(尤其是 Clojure 的 STM)进行了非常详细的介绍,您可以在这里找到(文章和幻灯片在这里)。我真的不知道任何其他资源(除了代码)来理解 Clojure 的 STM 是如何工作的。

于 2010-12-30T15:39:50.323 回答