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
impl PartitionedQueue
Sourcepub fn new(partition_count: usize, capacity_per_partition: usize) -> Self
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
Sourcepub fn with_defaults() -> Self
pub fn with_defaults() -> Self
Creates a partitioned queue with default settings.
Uses 4 partitions with Medium tier capacity.
Sourcepub fn for_high_contention() -> Self
pub fn for_high_contention() -> Self
Creates a partitioned queue sized for high contention.
Uses 8 partitions with Large tier capacity.
Sourcepub fn partition_for(&self, source_id: u64) -> usize
pub fn partition_for(&self, source_id: u64) -> usize
Returns the partition index for a given source ID.
Sourcepub fn partition_count(&self) -> usize
pub fn partition_count(&self) -> usize
Returns the number of partitions.
Sourcepub fn capacity_per_partition(&self) -> usize
pub fn capacity_per_partition(&self) -> usize
Returns the capacity per partition.
Sourcepub fn total_capacity(&self) -> usize
pub fn total_capacity(&self) -> usize
Total capacity across all partitions.
Sourcepub fn total_messages(&self) -> usize
pub fn total_messages(&self) -> usize
Total messages across all partitions.
Sourcepub fn try_enqueue_from(
&self,
source_id: u64,
envelope: MessageEnvelope,
) -> Result<()>
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.
Sourcepub fn try_enqueue(&self, envelope: MessageEnvelope) -> Result<()>
pub fn try_enqueue(&self, envelope: MessageEnvelope) -> Result<()>
Enqueues a message using the envelope’s source kernel ID.
Sourcepub fn try_dequeue_partition(&self, partition: usize) -> Result<MessageEnvelope>
pub fn try_dequeue_partition(&self, partition: usize) -> Result<MessageEnvelope>
Tries to dequeue from a specific partition.
Sourcepub fn try_dequeue_any(&self) -> Option<MessageEnvelope>
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.
Sourcepub fn partition_stats(&self, partition: usize) -> Option<QueueStats>
pub fn partition_stats(&self, partition: usize) -> Option<QueueStats>
Returns statistics for a specific partition.
Sourcepub fn stats(&self) -> PartitionedQueueStats
pub fn stats(&self) -> PartitionedQueueStats
Returns aggregated statistics across all partitions.
Sourcepub fn reset_stats(&self)
pub fn reset_stats(&self)
Resets statistics for all partitions.