[][src]Crate deadqueue

Deadqueue Latest Version Build Status

Deadqueue is a dead simple async queue with back pressure support.

This crate provides three implementations:

  • Unlimited (deadqueue::unlimited::Queue)

    • Based on crossbeam_queue::SegQueue
    • Has unlimitied capacity and no back pressure on push
    • Enabled via the unlimited feature in your Cargo.toml
  • Resizable (deadqueue::resizable::Queue)

    • Based on deadqueue::unlimited::Queue
    • Has limited capacity with back pressure on push
    • Supports resizing
    • Enabled via the resizable feature in your Cargo.toml
  • Limited (deadqueue::limited::Queue)

    • Based on crossbeam_queue::ArrayQueue
    • Has limit capacity with back pressure on push
    • Does not support resizing
    • Enabled via the limited feature in your Cargo.toml

Features

FeatureDescriptionExtra dependenciesDefault
unlimitedEnable unlimited queue implementationyes
resizableEnable resizable queue implementationdeadqueue/unlimitedyes
limitedEnable limited queue implementationyes

Example

This example is not tested
use std::sync::Arc;

const TASK_COUNT: usize = 1000;
const WORKER_COUNT: usize = 10;

type TaskQueue = deadqueue::limited::Queue<usize>;

#[tokio::main]
async fn main() {
    let queue = Arc::new(TaskQueue::new(10));
    for i in 0..TASK_COUNT {
        queue.push(i);
    }
    let mut futures = Vec::new();
    for _ in 0..WORKER_COUNT {
        let queue = queue.clone();
        futures.push(tokio::spawn(async move {
            let task = queue.pop().await;
            assert!(task > 1);
        }));
    }
    for future in futures {
        future.await;
    }
    assert_eq!(queue.len(), 0);
}

License

Licensed under either of

at your option.

Modules

limited

Limited queue implementation

resizable

Resizable queue implementation

unlimited

Unlimited queue implementation