私のプロジェクトでは、多くのクライアントがサーバーでマップを変更します。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"
そこで、Clojure の組み込みマップと STM の代わりにネイティブ Java CuncurrentHashMap を使用することにしました。Java CuncurrentHashMap を Clojure にラップして、Clojure マップのように assoc、contains?、dissoc などを使用して変更できるようにするにはどうすればよいですか。これにより、コード行を変更する必要がなくなります。
これを達成する方法はありますか?