Transactional Memory可行的是什么?

时间:2009-11-19 17:22:11

标签: performance multithreading synchronization reliability transactional-memory

我一直在处理事务内存及其系统编程(数据库,操作系统,服务器等)的可行性。我自己使用交易的经验,以及看到有多少社区在实际代码中使用交易,提出了一个问题:什么会说服你,一个编写生产代码的开发人员,在你的工作中使用交易记忆?

是否会被普遍采用?高速?提高可靠性?多少钱?


对于那些没有看过它们的人来说,内存事务就像数据库事务一样:操作并行进行(显然),如果两个事务之间存在冲突(例如,它们都写入相同的值),那么一个或两个这些交易将被回滚并重新启动。

交易记忆有一些好处:

  1. 可靠性完全摆脱死锁(例如错误的订单锁定)。
  2. 效果锁定争用率较低时速度更快。
  3. 可编程性细粒度并发控制,无需管理多个同步对象。
  4. 然而,即使假设TM 的正确,完整和快速实现,与锁相比,这个原语也有已知的缺点。

    1. 由于交易可能会多次执行,除了经验实验外,预测绩效更加困难。

      我们能否重现性能错误?

    2. 有些政策决定在正确的实施方式之间有所不同,例如:在另一个交易中结束的交易会发生什么?我们现在承诺,还是等我们?

      我们能充分了解代码的本地效果吗?

    3. 为了支持不可撤销的行为(例如,在回滚的事务中发送“fire missiles”命令),运行时变得更加复杂。

      我们是否可以充分了解代码的全局影响?

    4. 最后,由于软件实现可能是第一个使用的(已经有C,C ++,Haskell,Clojure和Scala等实现),实际上存在性能问题。在适度争用的情况下,软件交易会受到性能影响。

      您的绩效预算是多少?这些好处在多大程度上超过了潜在的成本?

3 个答案:

答案 0 :(得分:3)

我已经完成了TBoost STM的一些实验,它似乎可以使用,但我还不习惯在生产产品中使用它。所需的思维转变是重要的,所以我怀疑它会流行,除非它在实际应用中显示出令人信服的好处。

我一直听说未来是在大规模并行计算中,因为CPU在内核中开始加倍,就像以前的频率加倍一样。到目前为止,4核和8核桌面并没有真正显示出对一般工作负载有用。我认为我们有一个鸡与蛋的问题:并行机器的采用正在等待能够充分利用的软件,而高度并行软件的主流开发正在等待高度并行的硬件无处不在。

我想也许所需要的是一个开源软件项目,为Web服务器之类的东西采用STM模型。像这样的成功项目将是一个很好的模型,可以通过证明STM为现实世界做好准备来帮助启动整个软件行业的兴趣。

答案 1 :(得分:3)

有几件事:

1)软件事务内存(STM)系统必须健壮,可靠并经过测试才能实际运行。

2)无争议的STM事务的性能开销应与具有无争议锁定的相同例程相当。

3)当多个交易处于待决状态时,STM系统必须表现得更好,而对有争议的资源使用锁定。

答案 2 :(得分:0)

我认为STM系统必须为用户采用提供一些标准:

简单:理论上使用事务比使用锁更简单,但在实践中并不是没有理由使用它。

演出:用户可以接受演奏比使用锁慢一点,但速度不会太慢。

与非交易世界的互动:仅适用于仅限交易世界的STM系统无法在需要使用旧系统的项目中工作的人员成功,或者具有其他约束,这可以使用其他范例更好地解决。

正确性:用户需要确信他/她正在使用的系统在其基础和实施方面是正确的。目前大多数STM系统还没有处于产品阶段,因此人们可能暂时遭遇不稳定版本。

调试工具:调试器工具必须适应这种新范例(至少在STM系统包含在语言中时),因为当执行相同的代码时,调试可能会更复杂如果有冲突的话。