在我的项目中,许多客户将修改服务器中的地图。我使用ref
of map
,像这样:
(def dict (ref {})) ; the map we play with
我使用dosync
STM 方式更新此地图。但我发现它没有我希望的那么快:
user=> (time (dotimes [n 1000000] (dosync ( alter xx assoc xx 1 1))))
"Elapsed time: 2470.766 msecs"
所以我决定使用原生 Java CuncurrentHashMap 来代替 Clojure 内置的 map 和 STM。如何将 Java CuncurrentHashMap 包装到 Clojure 中,以便我可以像 Clojure 映射一样修改它,使用 assoc、包含?、dissoc 等等。这将使我修改最少的代码行。
有没有办法做到这一点?