在我的项目中,许多客户都会在服务器上修改地图。我使用map的ref,如下所示:
(def dict (ref {})) ; the map we play with我使用dosync,也就是扫描隧道显微镜的方式来更新这个地图。但我发现它并不像我希望的那样快:
user=> (time (dotimes [n 1000000] (dosync ( alter xx assoc xx 1 1))))
"Elapsed time: 2470.766 msecs"所以我决定使用原生Java来代替CuncurrentHashMap内置的map和STM。如何将Java封装到CuncurrentHashMap中,这样我就可以像修改Clojure map一样,使用assoc、contains?、dissoc等对其进行修改。这将使我修改最少的代码行。
有没有办法做到这一点?
发布于 2012-06-18 16:24:56
您可以使用atom,因为您只需要修改单个值,因此不需要事务,因此也不需要ref
user=> (def dict (atom {}))
user=> (time (dotimes [n 1000000] (swap! dict assoc :xx 1)))
"Elapsed time: 108.105703 msecs"https://stackoverflow.com/questions/11079162
复制相似问题