如何判断Clojure中的dosync是否正在更新ref?
我有一些需要对ref进行的更新,但是我想选择一个时间在ref没有被大量使用时执行更新。有没有一种方法可以通过编程告诉我ref何时在事务中?您确定要使用a而不是an 在我看来,你似乎想要执行更新,但你不在乎更新何时真正发生(只要它们最终发生)。这正是如何判断Clojure中的dosync是否正在更新ref?,clojure,Clojure,我有一些需要对ref进行的更新,但是我想选择一个时间在ref没有被大量使用时执行更新。有没有一种方法可以通过编程告诉我ref何时在事务中?您确定要使用a而不是an 在我看来,你似乎想要执行更新,但你不在乎更新何时真正发生(只要它们最终发生)。这正是代理的用途:以异步和独立的方式共享状态参考用于以同步和协调的方式共享状态 围绕ref是否在事务中构建应用程序逻辑对我来说是个坏主意。如果你提供更多的细节,也许有人能想出更好的设计。你可以在每次编写ref时更新访问时间(你提到它主要是编写的)。这会给你一
代理的用途:以异步和独立的方式共享状态<代码>参考
用于以同步和协调的方式共享状态
围绕ref是否在事务中构建应用程序逻辑对我来说是个坏主意。如果你提供更多的细节,也许有人能想出更好的设计。你可以
在每次编写ref时更新访问时间(你提到它主要是编写的)。这会给你一个忙碌的假期
(def my-ref (ref {}))
(def my-ref-atime (atom 0))
(add-watch my-ref (fn [key ref old new] (swap! my-ref-atime current-time-fn))))
然后,在过去,仅当时间超过10毫秒时才执行低优先级工作 你可能要求单一身份做的太多了。考虑有两个恒等式:一个具有高写入容量,另一个(可能是导数)的标识是偶尔更新的。p>
您的方法已经表明,偶尔的更新不是ref时间表的一部分,因为您愿意推迟它们。我确实关心某些事务何时更新,因为有很多写入。我希望一些不太重要的更新发生在ref不太忙的时候,以减少争用。这也是重新思考设计的一个好观点。。。我会仔细考虑这个正确而简单的问题。当我看到这个答案时,那是一个“为什么我没有想到那个!”的时刻。谢谢