Clojure中的一个参考还是多个参考?

Clojure中的一个参考还是多个参考?,clojure,stm,Clojure,Stm,我正在开发大量使用STM的clojure应用程序。通常使用一个全局引用还是多个较小的引用更好。每个ref将像存储在关系数据库表中一样存储数据,因此将有多个ref。使用较少ref的一个可能好处是,您将更容易理解多线程应用程序中发生的事情 使用更多引用的一个可能好处是,一次锁定的代码更少,速度更快 如果每个表都有一个ref,并且需要维护两个表之间的数据完整性,那么您将负责实现该逻辑,因为STM不知道数据如何在表之间关联 您的答案可能在于一个表中的更改会影响另一个表的频率,以及将单个ref拆分为每个表

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

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


使用更多引用的一个可能好处是,一次锁定的代码更少,速度更快

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


您的答案可能在于一个表中的更改会影响另一个表的频率,以及将单个ref拆分为每个表中的一个ref是否会显著提高性能。

我通常发现最好尽量减少ref的数量

主要原因:

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

当然,这最终取决于您的工作负载和并发性需求,但我的一般建议是尽可能少地使用ref,直到您确定需要更多。有趣的是,使用更多ref意味着更少的锁定。我认为这将是我的出路。你说“使用大量小裁判会带来更多的开销”。这是什么开销?