【问题标题】:real world application of clojure STMClojure STM 的实际应用
【发布时间】:2019-12-11 16:06:19
【问题描述】:

据我了解,clojure STM 可用于跨 ref 处理值。

我了解此属性在数据存储中很有用,其中必须在单个事务中更改 2 个或更多位置 - 原子性。

但是,这在什么情况下对软件应用程序有用?如果我想要共享可变状态,我可以将所有状态存储在一张地图中并使用 clojure.core/atom。

在哪些类型的应用程序/场景中使用 refs 对 Clojure 中的原子或其他状态原语有意义。

【问题讨论】:

标签: clojure stm


【解决方案1】:

使用原子确实是 Zach Tellman 在Elements of Clojure 书中所建议的(第 2 章 - 如果您有可变状态,请使用原子)。 他们说,在有状态容器的利用率达到 60% 之前,原子可能是更好的选择。 该建议在本节末尾总结为:

  • 如果您有可变状态,请确保它属于您的进程。
  • 如果有,请尝试将其表示为单个原子。
  • 如果这会导致性能问题,请尝试将工作分散到更多进程中。
  • 如果不可能,请查看是否可以将原子拆分为不需要共享一致性的较小原子。
  • 最后,如果这没有帮助,您应该开始研究 Clojure 的 STM 原语。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多