2012-06-18 95 views
4

在我的項目中,許多客戶端將修改服務器中的地圖。我用的map一個ref,像這樣:如何將現有功能應用於新班級?

(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的建設,在地圖和STM的地方。如何將Java CuncurrentHashMap封裝到Clojure中,以便我可以像Clojure地圖一樣修改它,使用assoc,contains,?dissoc等等。這將使我修改最少的代碼。

有沒有辦法做到這一點?

回答

7

您可以使用​​,因爲你只是修改一個值,你不需要爲ref

user=> (def dict (atom {})) 
user=> (time (dotimes [n 1000000] (swap! dict assoc :xx 1))) 
"Elapsed time: 108.105703 msecs" 
交易,因此沒有必要
相關問題