A thread-safe object pool with automatic return and attach/detach semantics.
The goal of an object pool is to reuse expensive to allocate objects or frequently allocated objects Common use case is when using buffer to read IO.
You would create a pool of size n, containing
Vec<u8> that can be used to call something like
[dependencies] object-pool = "0.3"
extern crate object_pool;
let pool: Pool<Vec<u8>> = Pool::new(32, || Vec::with_capacity(4096)); let mut reusable_buff = pool.pull().unwrap(); reusable_buff.clear(); some_file.read_to_end(reusable_buff); //reusable_buff falls out of scope and is returned to the pool
For access across multiple threads simply wrap the pool in an
let pool: Arc<Pool<T>> = Pool::new(cap, || T::new());
Check out the docs for more examples
The benchmarks compare
Check out the results
For those who don't like graphs, here's the raw output