4 个版本
0.10.3 | 2024年3月17日 |
---|---|
0.10.2 | 2023年2月7日 |
0.10.1 | 2023年2月6日 |
0.10.0 | 2023年2月2日 |
#389 in 并发
33KB
406 行
SQueue
这只是一个简单的包装器,在 标准 Rust VecDeque 之上。它做了一些有见地的选择,以便决定是应该在前端还是后端弹出/推送,并将 API 简化到最低限度,使其只能作为简单的 FIFO 队列。
与使用标准队列相比,主要区别在于这个队列有大小限制,当推送的元素超过其允许的容量时,将丢弃最老的元素。
除此之外,还提供了一个线程安全的同步实现,可以在线程之间共享。但并没有什么疯狂的特性,仅仅是一个简单的包装器。
该项目源于 HashLRU。
状态
SQueue 处于玩具项目和可用项目之间。它附带了一个相当完整的测试框架,并试图有合理的文档,所以这是一个加分项。另一方面,它相当年轻,据我所知,尚未在生产环境中使用。
如有疑问,请使用纯 VecDeque。
使用方法
use squeue::Queue;
let mut queue: Queue<usize> = Queue::new(3);
assert_eq!(None, queue.push(1));
assert_eq!(None, queue.push(2));
assert_eq!(None, queue.push(3));
assert_eq!(Some(1), queue.push(4));
assert_eq!(3, queue.len());
基准测试
来自一个随机的 CI 任务
running 6 tests
test tests::bench_read_usize_builtin_vecdeque ... bench: 0 ns/iter (+/- 0)
test tests::bench_read_usize_squeue_queue ... bench: 0 ns/iter (+/- 0)
test tests::bench_read_usize_squeue_sync_queue ... bench: 16 ns/iter (+/- 0)
test tests::bench_write_usize_builtin_vecdeque ... bench: 10 ns/iter (+/- 28)
test tests::bench_write_usize_squeue_queue ... bench: 3 ns/iter (+/- 0)
test tests::bench_write_usize_squeue_sync_queue ... bench: 21 ns/iter (+/- 0)
test result: ok. 0 passed; 0 failed; 0 ignored; 6 measured; 0 filtered out; finished in 11.75s
这不是彻底的基准测试结果,但总体想法是
- 使用成本低
- 在某些情况下,可能比使用内置类型更快,我的理解是,由于限制了内存大小,在向其中推送大量项目时,需要更少的内存分配,因为它们会被丢弃
- 同步版本如预期的那样显著较慢
要运行基准测试
cd bench
rustup default nightly
cargo bench
链接
许可协议
SQueue 在 MIT 许可协议下授权。
依赖关系
~165KB