2 个稳定版本
1.0.1 | 2020年2月29日 |
---|
#37 in #resource
17KB
296 行代码(不包括注释)
Rpool
目的
Rpool (资源池联合) 是一个小的 Rust crate,用于处理抽象资源池管理。Rpool 是一个无阻塞实现,提供状态重置、外部不可变上下文和可选的自动扩展(通过 reset
特性函数手动缩小)。
API
Poolable
任何池化数据都必须实现 rpool::Poolable
特性。一般来说,人们会围绕网络流或更高层资源有一个包装结构,以及该资源必要的任何内部状态。
pub trait Poolable<T>: Send + Sync {
fn new(context: &T) -> Self;
fn reset(&mut self) -> bool; // ran during return to the pool, must return true if resource is still valid.
}
T 类型参数用于上下文类型,如果不需要资源间上下文,则使用 ()
。通过 Mutex
实现或 std::atomic
,内部可变性是安全的。
PoolScaleMode
PoolScaleMode
是一个公开的枚举,指定了 rpool
可以使用的两种不同的扩展策略之一。
Static { count: usize }
:始终保持一定数量的资源,除非资源无法重置,否则不创建更多。AutoScale { maximum: Option<usize>, initial: usize, chunk_size: usize }
:从initial
资源分配开始,增加到maximum
或无限期地在大小为chunk_size
的块中。如果块大小为零,则资源分配在分配期间加倍。在AutoScale
中的重置资源不会立即自动重新创建,而是按需创建。
Pool
Pool
通过 Pool::new::<ContextType, PoolableType>(scale_mode: PoolScaleMode, context: Y)
构建,它返回一个 Arc<Pool<ContextType, PoolableType>>
。
Pool
对象上唯一公开的函数是 get(&self) -> PoolGuard<ContextType, PoolableType>
。
PoolGuard
透明地包装了 PoolableType
,并在释放时将项目返回到池中。
示例
请参阅 src/libs.rs
,tests
模块。