任何真实的使用软件事务内存的经验?

STM(软件事务内存)框架和语言扩展最近似乎越来越受到关注。 特别是Clojure有一个很好的实现,它使用MVCC(多版本并发控制)而不是滚动提交日志。 GHC Haskell也有一个非常优雅的STM monad ,它也允许交易组成。 最后,为了使我自己的号angular变得有些小,我最近实现了一个Scala的STM框架,它静态地强制引用限制。

所有这些都是有趣的实验,但它们似乎仅限于这个领域(实验)。 所以我的问题是:有没有人在现实世界中看过或使用过STM? 如果是这样,为什么? 它带来了什么样的好处? 性能呢? (关于这一点,似乎有很多矛盾的信息)你会再次使用STM还是更喜欢使用一些像演员一样的其他并发抽象?

我参与了Haskell中的BitTorrent客户端的爱好者开发(名为conjure)。 它使用STM很大程度上协调不同的线程(每个对等+ 1个存储pipe理+ 1个整体pipe理)。

优点:less锁,可读代码。

速度不是问题,至less不是由于STM的使用。

希望这可以帮助

文章“软件交易记忆:为什么它只是一个研究玩具?” 没有看到Haskell的实现,这是一个非常大的疏忽。 正如文章所指出的那样,STM的问题是实现必须select使得所有variables访问都是事务性的,除非编译器能够certificate它们是安全的(杀死性能),或者让程序员指出哪些是事务性的(这简化了简单性和可靠性)。 然而,Haskell实现使用Haskell的纯度来避免使大部分variables使用事务性的需要,而types系统提供了一个简单的模型以及事务性变异操作的有效执行。 因此,一个Haskell程序可以将STM用于线程间真正共享的variables,同时保证非事务性内存使用的安全。

我们经常使用它在Galois(Haskell)中的高并发应用程序。 它的工作原理,在Haskell世界广泛使用,并没有僵局(虽然当然可以有太多的争论)。 有时候我们会重写使用MVars的东西,如果我们有devise的权利 – 因为它们更快。

只要使用它。 这没什么大不了的。 就我而言,Haskell中的STM已经“解决”了。 没有进一步的工作要做。 所以我们使用它。

我们, factis研究有限公司 ,正在使用GHC生产的Haskell STM。 我们的服务器从临时的“数据服务器”接收到关于新的和修改过的“对象”的消息stream,它通过生成新的对象,修改对象,聚集事物等来变换这个事件stream并计算这些新的对象应该同步到连接的iPad。 它还接收来自iPad的表单input,处理后与“主stream”合并,并同步到其他iPad。 我们使用STM来处理需要在线程间共享的所有通道和可变数据结构。 线程在Haskell中是非常轻量级的,所以我们可以在不影响性能的情况下提供很multithreading(目前每个iPad连接5个)。 build立一个大型的应用程序总是一个挑战,有很多的经验教训,但我们从来没有任何问题与STM。 它始终如你所期望的那样工作。 我们必须做一些认真的性能调整,但是STM从来不是问题。 (80%的时间是我们试图减less短期分配和整体内存使用量。)

STM是Haskell和GHC运行时真正闪耀的一个领域。 这不仅仅是一个实验,而不仅仅是玩具程序。

我们正在Scala中构build我们的临床系统的一个不同组件,并且迄今为止一直在使用Actor,但是我们确实缺lessSTM。 如果任何人有经验,在生产中使用Scala STM实现中的一个,我很乐意听取您的意见。 🙂

您可能想阅读这篇文章: 软件事务内存:为什么它只是一个研究玩具?

我们已经在C语言的STM实现之上实现了我们的整个系统 (内存数据库和运行时)。在此之前,我们有一些基于日志和锁的机制来处理并发,但这是一个很难维护的问题。 我们对STM很满意,因为我们可以用同样的方法来对待每一个操作。 几乎所有的锁都可以被移除。 我们现在几乎所有的STM都使用STM,我们甚至还有一个内存pipe理器。

性能还不错,但为了加快速度,我们现在与苏黎世联邦理工学院合作开发了一个定制的操作系统 。 系统本身支持事务内存。

但也有一些由STM引起的挑战。 特别是对于导致不必要的交易冲突的较大的交易和热点。 例如,如果两个事务将一个项目放到一个链表中,就会发生一个不必要的冲突,而这个冲突可以通过一个无锁的数据结构来避免。

我目前在某些PGAS系统研究中使用Akka。 Akka是一个Scala库,用于开发使用Actor,STM的可扩展并发系统,以及Erlang的“让它失败/崩溃/火山口/ ROFL”原理模拟的内置容错function。 据说Akka的STM实现是围绕着Clojure的STM实现的一个Scala端口而构build的。 阿卡的STM模块的概述可以在这里find。

Interesting Posts