tokio-threadpool 0.1.10

A task scheduler backed by a work-stealing thread pool.
Documentation
use task::Task;

use std::sync::Arc;

use crossbeam_channel::{unbounded, Receiver, Sender};

#[derive(Debug)]
pub(crate) struct Queue {
    // TODO(stjepang): Use a custom, faster MPMC queue implementation that supports `steal_many()`.
    chan: (Sender<Arc<Task>>, Receiver<Arc<Task>>),
}

// ===== impl Queue =====

impl Queue {
    /// Create a new, empty, `Queue`.
    pub fn new() -> Queue {
        Queue {
            chan: unbounded(),
        }
    }

    /// Push a task onto the queue.
    #[inline]
    pub fn push(&self, task: Arc<Task>) {
        self.chan.0.send(task).unwrap();
    }

    /// Pop a task from the queue.
    #[inline]
    pub fn pop(&self) -> Option<Arc<Task>> {
        self.chan.1.try_recv().ok()
    }
}