Java stm实现问题

Java stm实现问题,java,multicore,cas,stm,Java,Multicore,Cas,Stm,嘿,伙计们, 在某种程度上,我认为这些stm实现(我使用了一点多元宇宙…)被夸大了。因为在某种程度上,他们使用CAS,这为他们提供了操作的原子性。如果我直接使用CAS而不是使用这些实现呢?虽然我同意这些实现可能也提供了其他功能,但如果我可以获得相同的性能,并且没有很多功能可以使用,那么我应该直接使用CAS,而不是使用Multiverse、scala或其他实现吗? 嘿,伙计们,当你们使用这些stm实现时,你们有没有注意到比CAS有什么性能提升?自从我运行原子计数器(在multiverse doc和

嘿,伙计们,
在某种程度上,我认为这些stm实现(我使用了一点多元宇宙…)被夸大了。因为在某种程度上,他们使用CAS,这为他们提供了操作的原子性。如果我直接使用CAS而不是使用这些实现呢?虽然我同意这些实现可能也提供了其他功能,但如果我可以获得相同的性能,并且没有很多功能可以使用,那么我应该直接使用CAS,而不是使用Multiverse、scala或其他实现吗?
嘿,伙计们,当你们使用这些stm实现时,你们有没有注意到比CAS有什么性能提升?自从我运行原子计数器(在multiverse doc和atomicIntegerJAVA中给出)以来,我在atomicInteger中获得了比在multiverse中更好的性能。那么,stm的基础是CAS吗

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

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

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


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

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

但是,是的,仅仅使用CAS操作要比使用执行CAS操作的东西快

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


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

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