Skip to main content

PartitionedQueue

Struct PartitionedQueue 

pub struct PartitionedQueue {
    partitions: Vec<SpscQueue>,
    partition_count: usize,
    dequeue_index: AtomicU64,
}
Expand description

A partitioned queue for reduced contention with multiple producers.

Instead of a single queue with a lock, this uses multiple independent partitions (SPSC queues) to reduce contention when many producers are sending messages concurrently.

Producers are routed to partitions based on their source ID, ensuring messages from the same source go to the same partition (preserving order).

§Example

use ringkernel_core::queue::{PartitionedQueue, QueueTier};

// Create 4 partitions with Medium tier capacity each
let queue = PartitionedQueue::new(4, QueueTier::Medium.capacity());

// Enqueue with source-based routing
queue.try_enqueue_from(source_id, envelope)?;

// Dequeue from any partition that has messages
if let Some(envelope) = queue.try_dequeue_any() {
    // process message
}

Fields§

§partitions: Vec<SpscQueue>§partition_count: usize§dequeue_index: AtomicU64

Implementations§

§

impl PartitionedQueue

pub fn new( partition_count: usize, capacity_per_partition: usize, ) -> PartitionedQueue

Creates a new partitioned queue.

§Arguments
  • partition_count - Number of partitions (should be power of 2 for efficiency)
  • capacity_per_partition - Capacity of each partition

pub fn with_defaults() -> PartitionedQueue

Creates a partitioned queue with default settings.

Uses 4 partitions with Medium tier capacity.

pub fn for_high_contention() -> PartitionedQueue

Creates a partitioned queue sized for high contention.

Uses 8 partitions with Large tier capacity.

pub fn partition_for(&self, source_id: u64) -> usize

Returns the partition index for a given source ID.

pub fn partition_count(&self) -> usize

Returns the number of partitions.

pub fn capacity_per_partition(&self) -> usize

Returns the capacity per partition.

pub fn total_capacity(&self) -> usize

Total capacity across all partitions.

pub fn total_messages(&self) -> usize

Total messages across all partitions.

pub fn try_enqueue_from( &self, source_id: u64, envelope: MessageEnvelope, ) -> Result<(), RingKernelError>

Enqueues a message to a partition based on source ID.

Messages from the same source always go to the same partition, preserving ordering for that source.

pub fn try_enqueue( &self, envelope: MessageEnvelope, ) -> Result<(), RingKernelError>

Enqueues a message using the envelope’s source kernel ID.

pub fn try_dequeue_partition( &self, partition: usize, ) -> Result<MessageEnvelope, RingKernelError>

Tries to dequeue from a specific partition.

pub fn try_dequeue_any(&self) -> Option<MessageEnvelope>

Tries to dequeue from any partition that has messages.

Uses round-robin to fairly distribute dequeues across partitions.

pub fn partition_stats(&self, partition: usize) -> Option<QueueStats>

Returns statistics for a specific partition.

pub fn stats(&self) -> PartitionedQueueStats

Returns aggregated statistics across all partitions.

pub fn reset_stats(&self)

Resets statistics for all partitions.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> ArchivePointee for T

§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<F, W, T, D> Deserialize<With<T, W>, D> for F
where W: DeserializeWith<F, T, D>, D: Fallible + ?Sized, F: ?Sized,

§

fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>

Deserializes using the given deserializer
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> LayoutRaw for T

§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Gets the layout of the type.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> Pointee for T

§

type Metadata = ()

The type for metadata in pointers and references to Self.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more