我在这两者上尝试了一些基准测试(软件事务内存和原子操作,我想两者都不相同),尽管我使用STM并没有做太多事情(似乎很难使用),但是我成功地尝试了对基准测试进行计数,即所有线程正在将共享计数器增加5000万次,并注意到原子操作的效果优于STM。

因此,我想知道由于STM尚未完全开发,它们在实际情况下的性能是否比原子操作好?
是否因为性能而将其中一个换成其他?请分享信息。
 我在网上找到的相关期刊是 Concurrent programming without locks

附言我正在使用JAVA作为编程语言。 STM:-多诗句。 AtomicOperatinn:AtomicInteger。

最佳答案

原子操作和STM是非常不同的野兽。特别是,原子操作是许多“较低级别”的构造-实际上,通常使用各种原子操作来实现STM。基本上:


原子操作允许您对单个对象进行并发安全更新。这很容易且快速,通常只需一条关于现代硬件的指令即可。
STM允许您对多个对象进行并发安全更新。这很复杂。


因此,STM系统需要增加额外的簿记开销来管理事务更新的复杂性-因此,如果您只需要更新单个对象,原子操作几乎总是会更快。

另外,您应该意识到,对于设计STM系统的最佳方法还没有达成共识-这是一个活跃的研究主题,涉及很多折衷。因此,在一个STM系统上执行良好的操作可能在另一STM系统上无法执行良好操作等

例如:我的favourite STM system at the moment is Clojure's-之所以特别吸引人,是因为它支持多版本并发控制,并且从不妨碍阅读器-在许多常见情况下,它具有显着的性能优势。

关于java - 原子操作与STM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6109229/

10-10 03:08