pub struct MultiTaskRuntimeBuilder<O: Default + 'static = (), P: AsyncTaskPoolExt<O> + AsyncTaskPool<O> = StealableTaskPool<O>> { /* private fields */ }Expand description
异步多线程任务运行时构建器
Implementations§
Source§impl<O: Default + 'static, P: AsyncTaskPoolExt<O> + AsyncTaskPool<O, Pool = P>> MultiTaskRuntimeBuilder<O, P>
impl<O: Default + 'static, P: AsyncTaskPoolExt<O> + AsyncTaskPool<O, Pool = P>> MultiTaskRuntimeBuilder<O, P>
Sourcepub fn new(pool: P) -> Self
pub fn new(pool: P) -> Self
构建指定任务池、线程名前缀、初始线程数量、最少线程数量、最大线程数量、线程栈大小、线程空闲时最长休眠时间和是否使用本地定时器的多线程任务池
Sourcepub fn thread_prefix(self, prefix: &str) -> Self
pub fn thread_prefix(self, prefix: &str) -> Self
设置工作者线程名称前缀
Sourcepub fn thread_stack_size(self, stack_size: usize) -> Self
pub fn thread_stack_size(self, stack_size: usize) -> Self
设置工作者线程栈大小
Sourcepub fn init_worker_size(self, init: usize) -> Self
pub fn init_worker_size(self, init: usize) -> Self
设置初始工作者数量
Sourcepub fn set_worker_limit(self, min: usize, max: usize) -> Self
pub fn set_worker_limit(self, min: usize, max: usize) -> Self
设置最小工作者数量和最大工作者数量
Sourcepub fn set_timeout(self, timeout: u64) -> Self
pub fn set_timeout(self, timeout: u64) -> Self
设置工作者空闲时最大休眠时长
Sourcepub fn set_timer_interval(self, interval: usize) -> Self
pub fn set_timer_interval(self, interval: usize) -> Self
设置工作者定时器间隔
Sourcepub fn build(self) -> MultiTaskRuntime<O, P>
pub fn build(self) -> MultiTaskRuntime<O, P>
构建并启动多线程异步运行时。
说明:
- 该函数消费 builder,创建 runtime、定时器、waiting worker 队列,并启动初始 worker 线程。
- 本轮保持公开 API 和启动流程不变,只在构建期增加 worker 数边界收敛,并确保 任务池保存 runtime 共享 waits 队列。
入参:
- 使用 builder 中已经配置好的 pool、线程名前缀、栈大小、worker 数、sleep timeout 和 timer interval。
返回:
- 已启动的
MultiTaskRuntime<O, P>。
边界条件:
- 如果 pool 的
worker_len()为 0,立即 panic;有效任务池不允许没有 worker slot。 - 如果
init/max大于 pool worker slot 数,会收敛到pool.worker_len()。 - 如果收敛后
min > max,会把min收敛到max。 - 上述收敛只避免内部 worker slot 越界,不改变已存在的公开方法签名。
性能:
- 构建时间 O(W),空间 O(W),W 为最终
maxworker 数。 - 该函数不是任务调度热路径。
副作用:
- 非纯函数,会分配 runtime 内部结构、注入 waits 队列、启动 worker 线程。
- 不执行用户 future;worker 启动后由工作循环正常消费任务。
安全性:
- 不引入新的 unsafe。
- 线程安全依赖
AsyncTaskPoolExt::set_waits在 pool 被放入Arc前完成,之后 waits 通过Arc<ArrayQueue<...>>在线程间共享。
Trait Implementations§
Source§impl<O: Default + 'static> Default for MultiTaskRuntimeBuilder<O>
impl<O: Default + 'static> Default for MultiTaskRuntimeBuilder<O>
impl<O: Default + 'static, P: AsyncTaskPoolExt<O> + AsyncTaskPool<O>> Send for MultiTaskRuntimeBuilder<O, P>
impl<O: Default + 'static, P: AsyncTaskPoolExt<O> + AsyncTaskPool<O>> Sync for MultiTaskRuntimeBuilder<O, P>
Auto Trait Implementations§
impl<O, P> Freeze for MultiTaskRuntimeBuilder<O, P>where
P: Freeze,
impl<O, P> RefUnwindSafe for MultiTaskRuntimeBuilder<O, P>where
P: RefUnwindSafe,
O: RefUnwindSafe,
impl<O, P> Unpin for MultiTaskRuntimeBuilder<O, P>
impl<O, P> UnsafeUnpin for MultiTaskRuntimeBuilder<O, P>where
P: UnsafeUnpin,
impl<O, P> UnwindSafe for MultiTaskRuntimeBuilder<O, P>where
P: UnwindSafe,
O: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more