嘿伙计们,
在某种程度上,我认为这些stm实现(多重宇宙,我用了一点点.),被过度炒作了。因为在某种程度上,他们使用CAS,这为他们提供了操作的原子性。如果我直接使用CAS而不是使用这些实现怎么办?虽然我同意这些实现也可能提供其他特性,但是如果我可以获得相同的性能,并且没有太多的特性可以使用,那么我应该直接使用CAS而不是使用multi、scala或其他实现吗?
嘿,伙计们,你们有没有注意到在使用那些stm实现时比CAS有什么性能提高?自从我运行(在multiverse文档和atomicInteger JAVA中给出) atomicCounter以来,在atomicInteger中获得的性能要比在multiverse中要好。那么,它是否类似于__the碱基是中国科学院?__
发布于 2011-07-07 09:18:54
STM可以构建在许多不同的同步原语之上,但是CAS经常使用,因为它是最简单、最轻量级的选项,不会强加太多不必要的语义约束。
但是是的,仅仅使用CAS操作将比使用执行CAS操作的东西更快。
但它们的用途不同。CAS允许您自动更新一些选定的数据类型,STM通常可以用于任意类型。STM为您提供了更大的事务范围上的原子性(如果您的事务修改了4个不同的变量,那么所有4个都是作为相同的原子操作提交的。一个CAS只会原子地更新一个对象),并且它为您提供了不存在于CAS中的隔离和一致性保证。
最终,你无法将两者进行比较。这就像把轮子比作汽车一样。是的,车轮更小,重量更轻,但这是因为它不提供与汽车相同的功能。
发布于 2011-06-22 13:46:18
如果我直接使用CAS而不是使用这些实现怎么办?
你可以这么做,但对大多数问题来说,它的水平太低了。放弃CAS就像把所有东西都写在程序集中--当然,你可以做到,但这不是很好地利用你的时间。
我们面临的挑战是找到更准确地符合问题抽象程度的东西,而不是计算机。
显然,在底层,任何软件TM都必须以硬件TM或原子锁定操作来实现。回滚和避免碰撞的附加语义可以单独完成。如果您只需要原子比较和交换,那么STM就比您需要的要多。下拉并使用互斥量或semp标,或其他更接近CAS指令的共享内存抽象。
https://stackoverflow.com/questions/6001128
复制相似问题