java - stm实现问题

标签 java multicore cas stm

大家好,
在某些时候,我认为这些 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/

相关文章:

ssl - 无法将证书导入 cacerts

java - Eclipse Maven 与 Jenkins 集成

java - 为 Java Web 应用程序设计 UI 的最佳方法

c# - 最好使用多线程? (线程池或线程)

r - 叉积矩阵的踪迹 - 更快的计算?

c++ - 使用多核提升协程

java - CAS 自定义身份验证处理程序主体 JSON 问题

java - 如何使用 JASIG SSO 同时验证两个客户端

java - FTP文件到主机

java - Java 中是否有像 C++ 那样的成员初始化列表语法?