Scala中Clojure的并发原语的真正替代品

时间:2013-11-16 11:05:49

标签: scala concurrency clojure

在Clojure中,我有四个原语来管理并发场景

  1. 参考 - 管理协调,同步对共享状态的更改
  2. 原子 - 管理未协调,同步对共享状态的更改
  3. 代理 - 管理异步对共享状态的更改
  4. Vars - 管理线程本地状态
  5. 我的问题是 - Scala中是否有成熟的等效内容?

    假设 - 我将假设:

    • 演员是解决代理人所面临问题的另一种方式 - 但他们绝不是替代方案。
    • 我知道Scala中有代理库 - 我很想知道它们是否被认为是成熟的

1 个答案:

答案 0 :(得分:7)

您为Clojure are based in software transactional memory.列出的大多数并发结构因此,我认为您基本上只是询问Scala中的STM支持。根据{{​​3}},Scala中STM的最佳选择是Akka documentation,他们说它实际上将在未来的某个时间包含在Scala标准库中。

ScalaSTM支持代理和引用(我认为它实际上基于Clojure版本)。我认为Atom的推论是 Ref.single 类型,它只是一个可以在atomic块之外使用的引用。

根据您的使用情况,var的一个很好的替代品是Java的ScalaSTM或Scala的ThreadLocal。如果您想要的只是线程本地数据,请使用ThreadLocal,但如果您确实需要动态绑定,那么我认为您需要DynamicVariable