原子操作与STM

时间:2011-05-24 10:45:39

标签: java performance concurrency multicore atomic


我正在尝试这两个基准测试(软件事务内存和原子操作,我猜两者都不一样),虽然我没有做太多使用STM(似乎很难使用),但我成功地尝试计算基准,即所有的线程将共享计数器递增50,000次,并注意到原子操作比STM更好。
所以我想知道,因为STM没有完全开发,它们在现实情况下是否比原子操作表现良好?
有一个人因为表现而转向其他人吗?请分享信息.. 我在网上找到的相关期刊是 Concurrent programming without locks

P.S。我使用JAVA作为编程语言。 STM: - 多节。 AtomicOperatinn:AtomicInteger。

1 个答案:

答案 0 :(得分:8)

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

  • 原子操作允许您对单个对象进行并发安全更新。这很容易,也很快,通常只是现代硬件上的一条指令。
  • STM允许您对多个对象进行并发安全更新。这很复杂。
因此,STM系统需要增加额外的簿记开销来管理事务更新的复杂性 - 因此,如果您只需要更新单个对象,则原子操作几乎总是更快。

此外,您应该意识到对于设计STM系统的最佳方法没有达成共识 - 这是一个活跃的研究课题,并且涉及许多权衡。因此,在一个STM系统上表现良好的可能在另一个STM系统等上表现不佳。

例如:my favourite STM system at the moment is Clojure's - 它特别吸引人,因为它支持多版本并发控制,并且永远不会阻碍读者 - 这在许多常见场景中都具有显着的性能优势。