8个版本

0.2.4 2022年4月1日
0.2.3 2022年3月24日
0.2.2 2022年2月26日
0.1.4 2022年2月22日
0.1.2 2020年12月23日

#1298 in 异步

Download history 47/week @ 2024-03-11 53/week @ 2024-03-18 70/week @ 2024-03-25 71/week @ 2024-04-01 45/week @ 2024-04-08 39/week @ 2024-04-15 49/week @ 2024-04-22 37/week @ 2024-04-29 43/week @ 2024-05-06 54/week @ 2024-05-13 36/week @ 2024-05-20 55/week @ 2024-05-27 36/week @ 2024-06-03 40/week @ 2024-06-10 36/week @ 2024-06-17 54/week @ 2024-06-24

168 每月下载次数
14 个crate(2个直接) 中使用

Apache-2.0

29KB
385 代码行

safina-threadpool

crates.io version license: Apache 2.0 unsafe forbidden pipeline status

线程池。

您可以单独使用它,也可以与 safina,一个安全的异步运行时一起使用。

特性

  • 将闭包或 FnOnce 添加到池中,其中一个线程将执行它
  • 自动重启崩溃的线程
  • 在无法创建线程后重试
  • 销毁 ThreadPool 结构以停止所有空闲线程。
  • 销毁池并等待所有线程停止
  • 禁止(不安全代码)
  • 仅依赖于 std
  • 100% 测试覆盖率

限制

  • 未优化

示例

let pool =
    safina_threadpool::ThreadPool::new("worker", 2).unwrap();
let receiver = {
    let (sender, receiver) =
        std::sync::mpsc::channel();
    for data in data_source {
        let sender_clone = sender.clone();
        pool.schedule(
            move || process_data(data, sender_clone));
    }
    receiver
};
let results: Vec<ProcessResult> =
    receiver.iter().collect();
// ...

替代方案

变更日志

变更日志
  • v0.2.4 - 更新文档。
  • v0.2.3 - 实现 From<NewThreadPoolError>From<TryScheduleError> 以支持 std::io::Error
  • 版本 v0.2.2 - 添加 ThreadPool::joinThreadPool::try_join
  • 版本 v0.2.1 - 提高测试覆盖率。
  • 版本 v0.2.0
    • ThreadPool::new 返回 Result
    • ThreadPool::try_schedule 在无法重启崩溃的线程时返回错误。
    • ThreadPool::schedule 处理启动替换线程失败的情况。
  • 版本 v0.1.4 - 在丢弃时停止线程。
  • 版本 v0.1.3 - 支持稳定的 Rust!需要 1.51+。
  • 版本 v0.1.2 - 添加另一个示例。
  • 版本 v0.1.1 - 简化内部结构并改进文档。
  • 版本 v0.1.0 - 首次发布。

待办事项

  • 使 jointry_joinArc<ThreadPool> 一起工作。
  • 当所有线程崩溃时记录一条警告。
  • 更新测试覆盖率。
  • 添加一个公开的 respawn_threads 函数。
  • 添加压力测试。
  • 添加基准测试。请参阅https://crates.io/crates/executors中的基准测试。
  • 添加一种方式,允许工作在同一个线程上调度另一个工作,并进行线程窃取。

许可证:Apache-2.0

无运行时依赖