Clojure中有一个ref或多个refs?

时间:2011-01-02 20:07:50

标签: clojure

我正在开发一个大量使用STM的clojure应用程序。一般来说,使用一个全局参考或许多小参考更好吗?每个ref都将存储像关系数据库表中的数据,因此会有几个引用。

2 个答案:

答案 0 :(得分:2)

使用更少的引用可能带来的好处是,您可以更容易理解您的虚拟多线程应用程序中发生的情况。

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

如果你有一个ref table for table并且你需要在两个表之间保持数据完整性,那么你将负责实现该逻辑,因为STM不知道数据如何在表之间相关。

你的答案可能在于一个表中的更改会影响另一个表的频率,以及是否将单个ref更改为每个表中的一个ref甚至会使性能显着提高。

答案 1 :(得分:2)

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

主要原因:

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

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