|
Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
|
Thread-local cached object pool for improved multi-threaded performance. More...
#include <object_pool.h>

Classes | |
| struct | config |
| Configuration for thread-local object pool. More... | |
| struct | statistics |
| Statistics for monitoring pool performance. More... | |
Public Member Functions | |
| thread_local_object_pool (const config &cfg=config{}) | |
| Construct thread-local object pool with configuration. | |
| ~thread_local_object_pool ()=default | |
| Destructor. | |
| std::unique_ptr< T > | acquire () |
| Get an object from the pool. | |
| void | release (std::unique_ptr< T > obj) |
| Return an object to the pool. | |
| statistics | get_statistics () const |
| Get pool statistics. | |
| void | clear () |
| Clear all objects from pool. | |
Private Member Functions | |
| void | initialize_pool () |
| Initialize pool with initial objects. | |
Static Private Member Functions | |
| static std::vector< std::unique_ptr< T > > & | get_local_cache () |
| Get thread-local cache. | |
Private Attributes | |
| config | config_ |
| std::vector< std::unique_ptr< T > > | global_pool_ |
| std::mutex | global_mutex_ |
| std::atomic< size_t > | global_size_ {0} |
| std::atomic< size_t > | local_cache_hits_ {0} |
| std::atomic< size_t > | global_pool_hits_ {0} |
| std::atomic< size_t > | new_allocations_ {0} |
Thread-local cached object pool for improved multi-threaded performance.
| T | The type of objects to pool |
This implementation uses thread-local caching to minimize lock contention in multi-threaded environments. Each thread maintains a small local cache of objects, only accessing the global pool when the local cache is empty or full.
Performance characteristics:
Memory overhead:
Definition at line 169 of file object_pool.h.
|
inlineexplicit |
Construct thread-local object pool with configuration.
| cfg | Pool configuration |
Definition at line 187 of file object_pool.h.
|
default |
Destructor.
|
inline |
Get an object from the pool.
Attempts to acquire from thread-local cache first (no lock), then from global pool in batches (single lock), and creates new if needed.
Definition at line 205 of file object_pool.h.
References kcenon::logger::memory::thread_local_object_pool< T >::config::allow_growth, kcenon::logger::memory::thread_local_object_pool< T >::config_, kcenon::logger::memory::thread_local_object_pool< T >::get_local_cache(), kcenon::logger::memory::thread_local_object_pool< T >::config::global_max, kcenon::logger::memory::thread_local_object_pool< T >::global_mutex_, kcenon::logger::memory::thread_local_object_pool< T >::global_pool_, kcenon::logger::memory::thread_local_object_pool< T >::global_pool_hits_, kcenon::logger::memory::thread_local_object_pool< T >::global_size_, kcenon::logger::memory::thread_local_object_pool< T >::local_cache_hits_, kcenon::logger::memory::thread_local_object_pool< T >::config::local_cache_size, and kcenon::logger::memory::thread_local_object_pool< T >::new_allocations_.

|
inline |
Clear all objects from pool.
Definition at line 326 of file object_pool.h.
References kcenon::logger::memory::thread_local_object_pool< T >::global_mutex_, kcenon::logger::memory::thread_local_object_pool< T >::global_pool_, kcenon::logger::memory::thread_local_object_pool< T >::global_pool_hits_, kcenon::logger::memory::thread_local_object_pool< T >::global_size_, kcenon::logger::memory::thread_local_object_pool< T >::local_cache_hits_, and kcenon::logger::memory::thread_local_object_pool< T >::new_allocations_.
|
inlinestaticprivate |
Get thread-local cache.
Definition at line 340 of file object_pool.h.
Referenced by kcenon::logger::memory::thread_local_object_pool< T >::acquire(), and kcenon::logger::memory::thread_local_object_pool< T >::release().

|
inline |
Get pool statistics.
Definition at line 311 of file object_pool.h.
References kcenon::logger::memory::thread_local_object_pool< T >::global_mutex_, kcenon::logger::memory::thread_local_object_pool< T >::global_pool_, kcenon::logger::memory::thread_local_object_pool< T >::statistics::global_pool_hits, kcenon::logger::memory::thread_local_object_pool< T >::global_pool_hits_, kcenon::logger::memory::thread_local_object_pool< T >::statistics::global_pool_size, kcenon::logger::memory::thread_local_object_pool< T >::statistics::global_size, kcenon::logger::memory::thread_local_object_pool< T >::global_size_, kcenon::logger::memory::thread_local_object_pool< T >::statistics::local_cache_hits, kcenon::logger::memory::thread_local_object_pool< T >::local_cache_hits_, kcenon::logger::memory::thread_local_object_pool< T >::statistics::new_allocations, and kcenon::logger::memory::thread_local_object_pool< T >::new_allocations_.
|
inlineprivate |
Initialize pool with initial objects.
Definition at line 348 of file object_pool.h.
References kcenon::logger::memory::thread_local_object_pool< T >::config_, kcenon::logger::memory::thread_local_object_pool< T >::global_mutex_, kcenon::logger::memory::thread_local_object_pool< T >::global_pool_, kcenon::logger::memory::thread_local_object_pool< T >::global_size_, and kcenon::logger::memory::thread_local_object_pool< T >::config::initial_size.
|
inline |
Return an object to the pool.
| obj | Object to return |
Adds to thread-local cache if space available (no lock), otherwise transfers batch to global pool (single lock).
Definition at line 261 of file object_pool.h.
References kcenon::logger::memory::thread_local_object_pool< T >::config_, kcenon::logger::memory::thread_local_object_pool< T >::get_local_cache(), kcenon::logger::memory::thread_local_object_pool< T >::config::global_max, kcenon::logger::memory::thread_local_object_pool< T >::global_mutex_, kcenon::logger::memory::thread_local_object_pool< T >::global_pool_, and kcenon::logger::memory::thread_local_object_pool< T >::config::local_cache_size.

|
private |
|
mutableprivate |
Definition at line 363 of file object_pool.h.
Referenced by kcenon::logger::memory::thread_local_object_pool< T >::acquire(), kcenon::logger::memory::thread_local_object_pool< T >::clear(), kcenon::logger::memory::thread_local_object_pool< T >::get_statistics(), kcenon::logger::memory::thread_local_object_pool< T >::initialize_pool(), and kcenon::logger::memory::thread_local_object_pool< T >::release().
|
private |
Definition at line 362 of file object_pool.h.
Referenced by kcenon::logger::memory::thread_local_object_pool< T >::acquire(), kcenon::logger::memory::thread_local_object_pool< T >::clear(), kcenon::logger::memory::thread_local_object_pool< T >::get_statistics(), kcenon::logger::memory::thread_local_object_pool< T >::initialize_pool(), and kcenon::logger::memory::thread_local_object_pool< T >::release().
|
private |
Definition at line 368 of file object_pool.h.
Referenced by kcenon::logger::memory::thread_local_object_pool< T >::acquire(), kcenon::logger::memory::thread_local_object_pool< T >::clear(), and kcenon::logger::memory::thread_local_object_pool< T >::get_statistics().
|
private |
Definition at line 366 of file object_pool.h.
Referenced by kcenon::logger::memory::thread_local_object_pool< T >::acquire(), kcenon::logger::memory::thread_local_object_pool< T >::clear(), kcenon::logger::memory::thread_local_object_pool< T >::get_statistics(), and kcenon::logger::memory::thread_local_object_pool< T >::initialize_pool().
|
private |
Definition at line 367 of file object_pool.h.
Referenced by kcenon::logger::memory::thread_local_object_pool< T >::acquire(), kcenon::logger::memory::thread_local_object_pool< T >::clear(), and kcenon::logger::memory::thread_local_object_pool< T >::get_statistics().
|
private |
Definition at line 369 of file object_pool.h.
Referenced by kcenon::logger::memory::thread_local_object_pool< T >::acquire(), kcenon::logger::memory::thread_local_object_pool< T >::clear(), and kcenon::logger::memory::thread_local_object_pool< T >::get_statistics().