Expand description
Single-producer single-consumer byte ring buffer.
§Design
┌─────────────────────────────────────────────────────────────────────────┐
│ Shared: │
│ head: CachePadded<AtomicUsize> ← Consumer writes, producer reads │
│ buffer: *mut u8 │
│ capacity: usize (power of 2) │
│ mask: usize (capacity - 1) │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────┐ ┌─────────────────────────────────┐
│ Producer: │ │ Consumer: │
│ tail: usize (local) │ │ head: usize (local) │
│ cached_head: usize (local) │ │ │
└─────────────────────────────────┘ └─────────────────────────────────┘§Record Layout
┌──────────────────────────────────────────────┐
│ len: u32 (4 bytes) │ ← payload length / commit marker
├──────────────────────────────────────────────┤
│ payload: [u8; len] (variable) │ ← raw bytes
├──────────────────────────────────────────────┤
│ padding: [u8; ...] (0-7 bytes) │ ← align to 8-byte boundary
└──────────────────────────────────────────────┘Records are packed contiguously. Total record size is align8(4 + len).
§Len Field Encoding
len == 0: Not committed, consumer waitslen > 0, high bit clear: Committed record, payload islenbyteslen high bit set: Skip marker, advance bylen & 0x7FFF_FFFFbytes
Structs§
- Consumer
- Consumer endpoint of the SPSC ring buffer.
- Producer
- Producer endpoint of the SPSC ring buffer.
- Read
Claim - A claimed record for reading.
- Write
Claim - A claimed region for writing a record.
Functions§
- new
- Creates a bounded SPSC byte ring buffer.