4 个版本
0.2.1 | 2019 年 6 月 12 日 |
---|---|
0.2.0 | 2019 年 6 月 12 日 |
0.1.1 | 2019 年 1 月 30 日 |
0.1.0 | 2019 年 1 月 5 日 |
在 并发 类别中排名 1002
每月下载量 103 次
24KB
371 行代码(不含注释)
spsc-bip-buffer
x86 | arm64 |
---|---|
spsc-bip-buffer
是一个单生产者单消费者环形缓冲区,始终支持写入连续的数据块。无法适应可用连续区域的写入请求将等待直到有新的空间可用(消费者读取数据后)。
spsc-bip-buffer
是无锁的,并使用原子操作进行协调。
以下是一个简单的示例
use spsc_bip_buffer::bip_buffer_with_len;
let (mut writer, mut reader) = bip_buffer_with_len(256);
let sender = std::thread::spawn(move || {
for i in 0..128 {
let mut reservation = writer.spin_reserve(8);
reservation.copy_from_slice(&[10, 11, 12, 13, 14, 15, 16, i]);
reservation.send(); // optional, dropping has the same effect
}
});
let receiver = std::thread::spawn(move || {
for i in 0..128 {
while reader.valid().len() < 8 {}
assert_eq!(&reader.valid()[..8], &[10, 11, 12, 13, 14, 15, 16, i]);
reader.consume(8);
}
});
sender.join().unwrap();
receiver.join().unwrap();
使用文档在 docs.rs/spsc-bip-buffer。
spsc-bip-buffer
受到 这篇 codeproject 上的文章 的启发,并与 James Munns 在 35c3 的一个深夜中设计。看看他的 #[no_std]
实现:jamesmunns/bbqueue。
Cargo.toml
spsc-bip-buffer = "..."
性能
截至 e2a9fa8
,在 Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz 上,它在两个不同的物理核心之间发送 255 字节长消息时,实现了每秒 12.5M 次发送和 3.2 GB/s 的吞吐量(参见 examples/perf.rs
实验结果)。
许可协议
根据您的选择许可
- Apache 许可协议,版本 2.0 (LICENSE-APACHE)
- MIT 许可协议 (LICENSE-MIT)