#task #queue #async

queued-task

并发队列任务处理

2 个版本

0.1.1 2024 年 8 月 2 日
0.1.0 2024 年 8 月 1 日

#519 in 并发

Download history · Rust 包仓库 229/week @ 2024-07-30 · Rust 包仓库 4/week @ 2024-08-06 · Rust 包仓库

每月 233 次下载

MIT 许可证

9KB
165

并发队列任务处理库

这个 Rust 库为处理高并发场景下的队列任务提供了一种稳健的解决方案。它确保任务按顺序处理,增强服务稳定性。此外,它还允许配置并行任务处理以优化性能。

特性

  • 基于队列的任务管理:任务按顺序入队和处理。
  • 高并发处理:设计用于高负载环境以保持稳定性。
  • 可配置的并行处理:通过参数设置同时处理的任务数量。

安装

将以下内容添加到您的 Cargo.toml

[dependencies]
queued-task = "0.1.0"

用法

    use std::sync::Arc;
    use std::time::Duration;
    use queued_task::QueuedTaskBuilder;
    
    #[tokio::test]
    async fn test() {
        // 10 queue_len, 2 process rate
        let t = Arc::new(QueuedTaskBuilder::new(10, 2).handle(handle).build());

        async fn handle(wait_time: Duration, c: usize) -> usize {
            tokio::time::sleep(Duration::from_secs(1)).await;
            println!("{} {}", c, wait_time.as_millis());
            c
        }

        let mut ts = vec![];

        for i in 0..20 {
            let tt = t.clone();
            ts.push(tokio::spawn(async move {
                // push task
                let state = tt.push(i).await.unwrap();
                // waiting for task result
                let result = state.wait_result().await;
                dbg!(result);
            }));
        }

        for x in ts {
            let _ = x.await;
        }
    }

依赖项

~2–3MB
~47K SLoC