大家好,
在某些时候,我认为这些 stm 实现(我使用过一点点的多元宇宙......)被过度炒作了。因为在某些时候他们使用 CAS,这为他们提供了操作的原子性。如果我直接使用 CAS 而不是使用这些实现会怎样?虽然我同意这些实现也可能提供其他功能,但是如果我可以获得相同的性能并且没有很多功能可以使用,那么我应该直接使用 CAS 而不是使用 multi-verse 或 scala 或其他实现吗?< br/>
嘿,伙计们,当您使用这些 stm 实现而不是 CAS 时,您是否注意到任何性能提升?因为当我运行(在multiverse doc和atomicInteger JAVA中给出)atomicCounter时,我在atomicInteger中获得了比在multiverse中更好的性能。那么,stm 的基础是 CAS 吗? _
最佳答案
STM 可以构建在许多不同的同步原语之上,但经常使用 CAS,因为它是最简单、最轻量级的选项,不会施加太多不必要的语义约束。
但是,仅仅使用 CAS 操作会比使用除其他之外执行 CAS 操作的东西更快。
但它们有不同的目的。 CAS 允许您自动更新一些选择数据类型,STM 通常可用于任意类型。 STM 为您提供了更大事务范围的原子性(如果您的事务修改了 4 个不同的变量,则所有 4 个变量都会作为同一个原子操作提交。单个 CAS 只会原子地更新一个对象),并且它给出CAS 不存在隔离性和一致性保证。
最终,您无法将两者进行比较。这就像将车轮与汽车进行比较一样。是的,车轮更小、更轻,但那是因为它不提供与汽车相同的功能。
关于java - stm实现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6001128/