给定:各种嵌套集合的复杂结构,其中refs分散在不同的级别.
需求:一种获取此类结构快照的方法,同时允许写入在其他线程中继续发生.
因此,"读者"线程需要在单个长事务中读取整个复杂状态."编写者"线程同时在多个短交易中进行修改.据我所知,在这种情况下,STM引擎利用了refs历史.
这里我们有一些有趣的结果.例如,读者在交易开始后10秒内到达一些参考.Writer每1秒修改一次ref.它产生10个ref历史值.如果超过ref的:max-history限制,读者交易将永远运行.如果超过:min-history,则可以多次重新运行事务.
但实际上读者只需要一个ref值(第一个),而作者只需要最近的一个.历史列表中的所有中间值都是无用的.有没有办法避免这种历史过度使用?
谢谢.
clojure ×1