1个不稳定版本
0.3.0 | 2020年3月9日 |
---|---|
0.2.0 |
|
0.1.1 |
|
0.1.0 |
|
#2492 在 算法 中
73KB
1.5K SLoC
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