嘿,伙计们,
在某些时候,我认为这些 stm 实现(我已经使用了一点点的 multiverse ......)被过度炒作了。因为在某些时候他们使用 CAS,这为他们提供了操作的原子性。如果我直接使用 CAS 而不是使用这些实现会怎样?虽然我同意这些实现也可能提供其他功能,但是如果我可以获得相同的性能并且没有很多功能可以使用,那么我应该直接使用 CAS 而不是使用 multi-verse 或 scala 或其他实现吗?
嘿伙计们,当您使用那些 stm 实现而不是 CAS 时,您是否注意到任何性能提升?因为当我运行时(在 multiverse doc 和 atomicInteger JAVA中给出) atomicCounter 我在 atomicInteger 中获得比在 multiverse 中更好的性能。是这样吗_stm的基础是CAS?_
问问题
444 次
2 回答
2
STM 可以构建在许多不同的同步原语之上,但经常使用 CAS,因为它是最简单、最轻量级的选项,不会强加太多不必要的语义约束。
但是,是的,仅使用 CAS 操作将比使用执行 CAS 操作的东西更快。
但它们有不同的用途。CAS 允许您以原子方式更新一些选择的数据类型,STM 通常可用于任意类型。STM 在更大的事务范围内为您提供原子性(如果您的事务修改了 4 个不同的变量,所有 4 个变量都作为同一个原子操作提交。单个 CAS 只会以原子方式更新一个对象),它为您提供隔离和一致性保证CAS 不存在。
最终,您无法将两者进行比较。这就像将车轮与汽车进行比较。是的,车轮更小更轻,但那是因为它没有提供与汽车相同的功能。
于 2011-07-07T09:18:54.767 回答
1
如果我直接使用 CAS 而不是使用这些实现会怎样?
你可以这样做,但对于大多数问题来说它太低级了。降级到 CAS 就像在汇编中编写所有内容 - 当然,您可以做到,但这并不能很好地利用您的时间。
挑战在于找到更准确地匹配问题抽象级别的东西,而不是计算机的抽象级别。
显然,在底层,任何软件 TM 都必须根据硬件 TM 或原子锁定操作来实现。回滚和冲突避免的附加语义可以单独完成。如果您只需要原子比较和交换,那么 STM 就比您需要的多。下拉并使用互斥量或信号量,或其他更接近 CAS 指令的共享内存抽象。
于 2011-06-22T13:46:18.367 回答