Clojure 数据结构与算法优化实践
1. 瞬态数据结构的使用与注意事项
瞬态数据结构在 Clojure 中是一种优化手段,它能在某些场景下提升性能。不过,使用瞬态数据结构时,必须确保对其进行线性使用,即一旦修改,就不能再次使用该瞬态数据。例如,在进行归约操作时,使用瞬态数据结构可能是比较容易实现的优化方式。
1.1 并发安全问题
瞬态数据结构内置了并发保护机制,只有创建它的线程才能使用或修改它。以下代码展示了在不同线程中使用瞬态数据结构会引发错误:
(let [t (transient {})]
@(future (get t :a)))
;= #<IllegalAccessError java.lang.IllegalAccessError:
;= Transient used by non-owner thread>
1.2 组合性问题
瞬态数据结构的组合性较差。 persistent! 函数不会递归处理嵌套的瞬态数据结构,例如:
(persistent! (transient [(transient {})]))
;= [#<TransientArrayMap clojure.lang.PersistentArrayMap$TransientArrayMap@b57b39f>]
1.3 语义问题
由于瞬态数据结构是可变
超级会员免费看
订阅专栏 解锁全文
96

被折叠的 条评论
为什么被折叠?



