Skip to main content

PartitionedQueue

Struct PartitionedQueue 

Source
pub struct PartitionedQueue { /* private fields */ }
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
}

Implementations§

Source§

impl PartitionedQueue

Source

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

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
Source

pub fn with_defaults() -> Self

Creates a partitioned queue with default settings.

Uses 4 partitions with Medium tier capacity.

Source

pub fn for_high_contention() -> Self

Creates a partitioned queue sized for high contention.

Uses 8 partitions with Large tier capacity.

Source

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

Returns the partition index for a given source ID.

Source

pub fn partition_count(&self) -> usize

Returns the number of partitions.

Source

pub fn capacity_per_partition(&self) -> usize

Returns the capacity per partition.

Source

pub fn total_capacity(&self) -> usize

Total capacity across all partitions.

Source

pub fn total_messages(&self) -> usize

Total messages across all partitions.

Source

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

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.

Source

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

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

Source

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

Tries to dequeue from a specific partition.

Source

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.

Source

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

Returns statistics for a specific partition.

Source

pub fn stats(&self) -> PartitionedQueueStats

Returns aggregated statistics across all partitions.

Source

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
Source§

impl<T> ArchivePointee for T

Source§

type ArchivedMetadata = ()

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

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
Source§

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

Source§

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.

Source§

impl<T> Instrument for T

Source§

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

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

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> LayoutRaw for T

Source§

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

Gets the layout of the type.
Source§

impl<T> Pointee for T

Source§

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.
Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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