For pooling and caching objects which are costly to create.
##Install
(use 'pool.core)get-pool takes a no argument function for object creation.
(defpool (get-pool (fn [] :heavy-object)))Next, borrow and return from pool.
(borrow pool) ;=> :heavy-object
(return pool :heavy-object)###Keyed Object Pool
get-keypool takes a single arity function for object creation.
(defpool (get-keypool (fn [k] (str:heavy k))))
(borrow pool :object) ;=> ":heavy:object"; Return key and object
(return pool :object":heavy:object")get-pool and get-keypool takes optional kwargs for destory, validate,
activate and passivate for finer control of object creation and deletion.
Caching although a different concept is provided in the library for caching objects which are threadsafe in themselves and thus can be shared instead of pooled, but are very costly to create.
get-cache and get are the only available methods to work with. get-cache
take a single arity function on key for object creation.
(require '[pool.cache :as c])
(defcache (c/get-cache (fn [k] (print"once!") (Thread/sleep1000) k)))
(c/get cache 1) ;=> once! 1; Safeguards against multiple threads.
(defndouble-write [x] (future (c/get cache x)) (future (c/get cache x)))
(double-write5) ;=> once! ...Copyright © 2014 kul
Distributed under the Eclipse Public License.