Skip to main content

Module spsc

Module spsc 

Source
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 waits
  • len > 0, high bit clear: Committed record, payload is len bytes
  • len high bit set: Skip marker, advance by len & 0x7FFF_FFFF bytes

Structs§

Consumer
Consumer endpoint of the SPSC ring buffer.
Producer
Producer endpoint of the SPSC ring buffer.
ReadClaim
A claimed record for reading.
WriteClaim
A claimed region for writing a record.

Functions§

new
Creates a bounded SPSC byte ring buffer.