Skip to main content

AsyncTaskPool

Trait AsyncTaskPool 

Source
pub trait AsyncTaskPool<O: Default + 'static = ()>:
    Default
    + Send
    + Sync
    + 'static {
    type Pool: AsyncTaskPoolExt<O> + AsyncTaskPool<O>;

    // Required methods
    fn get_thread_id(&self) -> usize;
    fn len(&self) -> usize;
    fn push(&self, task: Arc<AsyncTask<Self::Pool, O>>) -> Result<()>;
    fn push_local(&self, task: Arc<AsyncTask<Self::Pool, O>>) -> Result<()>;
    fn push_priority(
        &self,
        priority: usize,
        task: Arc<AsyncTask<Self::Pool, O>>,
    ) -> Result<()>;
    fn push_keep(&self, task: Arc<AsyncTask<Self::Pool, O>>) -> Result<()>;
    fn try_pop(&self) -> Option<Arc<AsyncTask<Self::Pool, O>>>;
    fn try_pop_all(&self) -> IntoIter<Arc<AsyncTask<Self::Pool, O>>>;
    fn get_thread_waker(&self) -> Option<&Arc<(AtomicBool, Mutex<()>, Condvar)>>;
}
Expand description

异步任务池

Required Associated Types§

Required Methods§

Source

fn get_thread_id(&self) -> usize

获取绑定的线程唯一id

Source

fn len(&self) -> usize

获取当前异步任务池内任务数量

Source

fn push(&self, task: Arc<AsyncTask<Self::Pool, O>>) -> Result<()>

将异步任务加入异步任务池

Source

fn push_local(&self, task: Arc<AsyncTask<Self::Pool, O>>) -> Result<()>

将异步任务加入本地异步任务池

Source

fn push_priority( &self, priority: usize, task: Arc<AsyncTask<Self::Pool, O>>, ) -> Result<()>

将指定了优先级的异步任务加入任务池

Source

fn push_keep(&self, task: Arc<AsyncTask<Self::Pool, O>>) -> Result<()>

将一次唤醒或托管延期唤醒产生的一个可运行任务入队。

每次成功调用准确拥有一个物理队列项。托管 AsyncTask 状态会在调用本方法前 合并重复唤醒;自定义任务池不得自行增加轮询或重复队列项。返回 Err 表示 运行时无法保证该次唤醒的进度,因为本特征会消费任务 Arc,不能返还所有权。

供运行时使用的实现必须线程安全,不得与 Future::poll 重入,并应在唤醒热路径 上保持不阻塞/O(1)。实现不得调用用户代码或通知多个工作线程;工作线程通知由 运行时在成功入队后执行。

Source

fn try_pop(&self) -> Option<Arc<AsyncTask<Self::Pool, O>>>

尝试从异步任务池中弹出一个异步任务

Source

fn try_pop_all(&self) -> IntoIter<Arc<AsyncTask<Self::Pool, O>>>

尝试从异步任务池中弹出所有异步任务

Source

fn get_thread_waker(&self) -> Option<&Arc<(AtomicBool, Mutex<()>, Condvar)>>

获取本地线程的唤醒器

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§