1个不稳定版本

0.3.0 2020年3月9日
0.2.0 2019年11月11日
0.1.1 2019年8月25日
0.1.0 2019年7月10日

#2492算法

MIT 协议

73KB
1.5K SLoC

crates-url codecov pipeline status

Kitty Pool

目的

该库的目的是提供一个既安全又易于使用的缓冲池,适用于单线程和多线程环境。'Kitty Pool' 允许请求 '范围',这些 '范围' 作为缓冲区的拥有切片。'范围' 的用户可以安全地读取和写入缓冲区的拥有部分。'Kitty Pool' 还允许实现标准的分散/收集列表。

示例

use kitty_pool::*;

const POOL_SIZE: usize = 1024;
const BLOCK_SIZE: usize = 64;
const REQUEST_SIZE: usize = 256;

fn main() {
  // Supports Contiguous and ScatterGatherList
  let result = kitty_pool(KittyPoolOrganization::Contiguous, POOL_SIZE, BLOCK_SIZE);
  assert!(result.is_ok());
  let mut kitty_pool = result.unwrap();
  let rand_string: String = thread_rng()
      .sample_iter(&Alphanumeric)
      .take(REQUEST_SIZE)
      .collect();
  let rand_bytes: Vec<u8> = Vec::from(rand_string.as_bytes());
  let mut buffer = vec![0; REQUEST_SIZE];
  let future = async {
      let mut token = kitty_pool.borrow(REQUEST_SIZE).await;
      assert!(token.is_ok());
      token = kitty_pool.write(&token.unwrap(), &rand_bytes).await;
      assert!(token.is_ok());
      token = kitty_pool.read(&token.unwrap(), &mut buffer).await;
      assert!(token.is_ok());
      assert_eq!(*buffer, *rand_bytes);
      assert!(kitty_pool.release(&token.unwrap()).is_ok());
  };
  block_on(future);
}

依赖项

~2.3–3MB
~64K SLoC