10个版本 (5个重大更新)
0.9.1 | 2023年12月4日 |
---|---|
0.9.0 | 2023年12月3日 |
0.8.1 | 2023年10月25日 |
0.7.0 | 2023年10月5日 |
0.4.1 | 2022年10月20日 |
#758 in 并发
每月下载量 327
用于 rust-box
115KB
3K SLoC
任务执行队列
英文 | 简体中文
任务执行队列 一个任务执行队列。可以限制并发任务的数量,并可以控制相同类型任务的执行顺序。通常,可以使用Tokio或async-std直接执行异步任务;然而,在某些特殊业务场景中,当我们需要批量执行任务并控制任务并发数时,直接使用spawn()很容易导致负载过高和资源(如CPU或内存)耗尽;此Crate旨在解决此类问题。
特性
- 执行任务;
- 执行任务并返回结果;
- 限制并发任务数;
- 任务队列;
- 相同类型任务的顺序执行;
- 支持本地任务;
计划
示例
- 快速开始
fn main() {
use async_std::task::spawn;
use rust_box::task_exec_queue::{init_default, default, SpawnDefaultExt};
let task_runner = init_default();
let root_fut = async move {
spawn(async {
//start executor
task_runner.await;
});
//execute task ...
let _ = async {
println!("hello world!");
}.spawn().await;
default().flush().await;
};
async_std::task::block_on(root_fut);
}
- 执行并返回结果
fn main() {
use async_std::task::spawn;
use rust_box::task_exec_queue::{Builder, SpawnExt};
let (exec, task_runner) = Builder::default().workers(10).queue_max(100).build();
let root_fut = async move {
spawn(async {
//start executor
task_runner.await;
});
//execute task and return result...
let res = async {
"hello world!"
}.spawn(&exec).result().await;
println!("result: {:?}", res.ok());
exec.flush().await;
};
async_std::task::block_on(root_fut);
}
- 顺序执行
fn main() {
use async_std::task::spawn;
use rust_box::task_exec_queue::{Builder, SpawnExt};
let (exec, task_runner) =
Builder::default().workers(10).queue_max(100).group().build::<&str>();
let root_fut = async move {
spawn(async {
//start executor
task_runner.await;
});
//execute task ...
let _res = async move {
println!("hello world!");
}.spawn(&exec).group("g1").await;
let res = async move {
"hello world!"
}.spawn(&exec).group("g1").result().await;
println!("result: {:?}", res.ok());
exec.flush().await;
println!("exec.actives: {}, waitings: {}, completeds: {}", exec.active_count(), exec.waiting_count(), exec.completed_count());
};
async_std::task::block_on(root_fut);
}
更多示例
依赖项
~3.5–9.5MB
~83K SLoC