2 个稳定版本

1.0.1 2020年2月29日

#37 in #resource

GPL-3.0-or-later

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.rstests 模块。

无运行时依赖