Clojure、Haskell(和其他语言)中用于STM的算法是什么?

16

据我所知,有多种不同的算法可用于实现软件事务内存(STM),这是一个非常活跃的研究领域。那么,在哪里可以找到使用不同语言和库的算法信息呢?特别是在Clojure和Haskell(GHC)中(无需深入源代码)。

3个回答

17
除了代码本身,关于Clojure的STM的最终资源是Mark Volkmann的软件事务内存文章。它提供了STM-方法(与其他并发方法相比)的简要高级概述,总结了Clojure中可用的各种并发功能,然后深入探讨了Clojure的STM,描述了在事务期间确切发生的情况,并最终深入到涉及的单个类的级别。除了提供有关Clojure STM机制内部工作的大量硬性信息外,它还包含了很多关于Clojure并发导向特性的非常有洞察力的评论,因为它们在惯用的Clojure程序中使用。
Mark的STM资源的实际入口点是此页面,目前除了链接到最新版本的主STM文章之外,还展示了一些STM幻灯片。

谢谢!这就是我正在寻找的那种信息(顺便说一下,该页面包含了一个非常清晰的Clojure STM解释)。 - Jay

6

从一个高层次来看,Clojure的STM实现与所有其他实现非常不同,这一点很有趣。Rich更多地关注实际的、真实世界中高性能数据库,而不是关于假设STM的学术论文。例如,据我所知,Clojure的STM是唯一使用多版本并发控制(MVCC)的STM,在数据库领域中,这是一种众所周知的技术(实际上,几乎没有任何严肃的数据库不使用MVCC),但在STM领域中几乎没有讨论。


4
当前,各种STM算法/实现之间仍然没有很好的比较。因此,它们是相当独特的。我们可以谈论哪些语义最自然,但是除了偏见外,我们没有其他依据来说MVCC在效率方面比其他实现技术更好/更差。我们可以注意到MVCC暴露了写入偏差的可能性,而保留真正可序列化语义的实现则不会出现这种情况。(虽然也有办法解决这个问题)。 - sclv

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接