gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:52:47 24 4
gpt4 key购买 nike

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

  • Refs - 管理对共享状态的协调、同步更改
  • Atoms - 管理对共享状态的不协调的同步更改
  • 代理 - 管理对共享状态的异步更改
  • Vars - 管理线程局部状态

  • 我的问题是——在 Scala 中是否有成熟的等价物?

    假设 - 我会假设:
  • Actor 是解决代理问题的另一种方式 - 但它们绝不是替代品
  • 我知道 Scala 中有代理库 - 我很想知道它们是否被认为是成熟的
  • 最佳答案

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

    ScalaSTM 支持 Agents 和 Refs(我相信它们实际上是基于 Clojure 版本的)。我认为 Atom 的必然结果是 Ref.single 类型,它只是一个可以在 atomic 之外使用的 ref堵塞。

    根据您的用例,var 的良好替代品将是 Java 的 ThreadLocal 或 Scala 的 DynamicVariable .使用ThreadLocal如果您想要的只是线程本地数据,但如果您确实需要动态绑定(bind),那么我认为您需要 DynamicVariable .

    关于scala - Scala 中 Clojure 并发原语的真正替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20017650/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com