【问题标题】:stm implementations issuesstm实现问题
【发布时间】:2011-05-14 10:09:56
【问题描述】:

大家好,
在某些时候,我认为这些 stm 实现(我已经使用了一点点的 multiverse ......)被过度炒作了。因为在某些时候他们使用 CAS,这为他们提供了操作的原子性。如果我直接使用 CAS 而不是使用这些实现会怎样?虽然我同意这些实现也可能提供其他功能,但是如果我可以获得相同的性能并且没有很多功能可以使用,那么我应该直接使用 CAS 而不是使用 multi-verse 或 scala 或其他实现吗? 嘿伙计们,当您使用那些 stm 实现而不是 CAS 时,您是否注意到任何性能提升?因为当我运行时(在 multiverse doc 和 atomicInteger JAVA 中给出) atomicCounter 我在 atomicInteger 中获得比在 multiverse 中更好的性能。那么 _stm 的基础是 CAS 吗? _

【问题讨论】:

    标签: java multicore cas stm


    【解决方案1】:

    STM 可以建立在许多不同的同步原语之上,但经常使用 CAS,因为它是最简单、最轻量级的选项,不会施加太多不必要的语义约束。

    但是是的,只是使用 CAS 操作会比使用除其他外执行 CAS 操作的东西更快。

    但它们的用途不同。 CAS 允许您以原子方式更新一些 select 数据类型,STM 通常可用于任意类型。 STM 在更大的事务范围内为您提供原子性(如果您的事务修改了 4 个不同的变量,所有 4 个变量都作为同一个原子操作提交。单个 CAS 只会以原子方式更新 one 对象),它给出CAS 不存在的隔离和一致性保证。

    最终,您无法将两者进行比较。这就像将车轮与汽车进行比较。是的,轮子更小更轻,但那是因为它没有提供与汽车相同的功能。

    【讨论】:

    • 是的,我也意识到了这些问题。我阅读了一篇关于比较 1)MCAS 2)WSTM 3)OSTM 的论文。因此,根据需要(和可用性),我们选择了其中任何一个。谢谢:-)
    【解决方案2】:

    如果我直接使用 CAS 而不是使用这些实现呢?

    你可以这样做,但对于大多数问题来说它太低级了。降级到 CAS 就像在汇编中编写所有内容 - 当然,您可以做到,但这并不能很好地利用您的时间。

    挑战在于找到更准确地匹配问题抽象级别而不是计算机抽象级别的东西。

    显然,在底层,任何软件 TM 都必须根据硬件 TM 或原子锁定操作来实现。回滚和避免冲突的附加语义可以单独完成。如果您只需要原子比较和交换,那么 STM 就超出了您的需要。下拉并使用互斥量或信号量,或其他更接近 CAS 指令的共享内存抽象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 2010-10-15
      • 2011-01-09
      • 1970-01-01
      相关资源
      最近更新 更多