spsc-bip-buffer
x86 | arm64 |
---|---|
spsc-bip-buffer
is a single-producer single-consumer circular buffer that always supports writing a contiguous chunk of data. Write requests that cannot fit in an available contiguous area will wait till space is newly available (after the consumer has read the data).
spsc-bip-buffer
is lock-free and uses atomics for coordination.
Here's a simple example:
use bip_buffer_with_len;
let = bip_buffer_with_len;
let sender = spawn;
let receiver = spawn;
sender.join.unwrap;
receiver.join.unwrap;
Usage documentation is at docs.rs/spsc-bip-buffer.
spsc-bip-buffer
is inspired by this article on codeproject and was designed with James Munns during a long night at 35c3. Have a look at his #[no_std]
implementation: jamesmunns/bbqueue.
Cargo.toml
spsc-bip-buffer = "..."
Performance
As of e2a9fa8
, on a Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz, it achieves 12.5M sends/sec and 3.2 GB/s with 255-byte long messages sent between two separate physical cores (see the examples/perf.rs
experiment).
License
Licensed under your choice of:
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT License (LICENSE-MIT)