据我了解,有几种不同的算法可以实现软件事务内存(这是一个非常活跃的研究领域)。我在哪里可以找到(无需深入研究源代码)在不同语言和库中使用的,特别是在 Clojure 和 Haskell (GHC) 中?
3 回答
Clojure STM 的最终资源——除了代码本身——是 Mark Volkmann 的软件事务内存文章。
它简要介绍了 STM 方法(与其他并发方法相比),总结了 Clojure 中可用的各种并发特性,然后深入研究 Clojure 的 STM,准确描述事务期间发生的事情并最终向下到所涉及的各个类的级别。除了提供大量有关 Clojure STM 机器内部工作原理的硬信息外,它还包含大量非常有见地的评论,这些评论与 Clojure 在惯用的 Clojure 程序中使用的面向并发的特性有关。
Mark 的 STM 资源的实际入口点是这个页面,除了最新版本的主要 STM 文章的链接外,目前还提供一些 STM 幻灯片。
Clojure 的 STM 实现在一个非常高的层次上很有趣,那就是它与所有其他实现有很大不同。Rich 更关注现实世界的高性能数据库,而不是关于假设 STM 的学术论文。例如,据我所知,Clojure 的 STM 是唯一一个使用多版本并发控制 (MVCC) 的 STM,这是数据库世界中众所周知的技术(事实上,几乎没有真正的数据库,它没有使用 MVCC),但在 STM 世界中几乎没有讨论过。
有关Haskell(和 GHC),请参见http://www.haskell.org/haskellwiki/Software_transactional_memory ,对于 Clojure ,请参见http://clojure.org/concurrent_programming 。
我相信 GHC 自带了一个 STM 库,而且 Clojure 中有一些 STM 的技术。
对于其他语言,请参阅http://en.wikipedia.org/wiki/Software_transactional_memory#Implementations