2

我正在开发一个大量使用 STM 的 clojure 应用程序。通常使用一个全局参考还是使用许多较小的参考更好。每个 ref 将像在关系数据库表中一样存储数据,因此会有几个 ref。

4

2 回答 2

2

使用更少的 refs 的一个可能的好处是,您将更容易理解在您可能是多线程的应用程序中发生的事情。

使用更多 refs 的一个可能好处是您将一次锁定更少的代码并提高速度。

如果每个表都有一个 ref,并且需要维护两个表之间的数据完整性,那么您将负责实现该逻辑,因为 STM 不知道数据如何在表之间关联。

您的答案可能在于一个表中的更改多久会影响另一个表,以及将您的单个参考分解为每个表的一个参考是否甚至会给您带来显着的性能提升。

于 2011-01-02T20:25:10.983 回答
2

我通常发现最好减少裁判的数量。

关键原因:

  • 将大部分应用程序状态视为单个不可变块通常很有帮助(例如,启用简单的快照以进行分析,或传递给测试函数)
  • 使用大量小 ref 会产生更多开销
  • 它使您的顶级命名空间更简单

当然,这最终将取决于您的工作量和并发需求,但我的一般建议是尽可能少地使用 refs,直到您确定需要更多。

于 2011-01-02T20:34:49.327 回答