2 个版本

0.0.5 2024年5月15日
0.0.3 2023年5月4日

#206并发

Download history 159/week @ 2024-05-10 21/week @ 2024-05-17 2/week @ 2024-05-24

每月 95 次下载

自定义许可证

185KB
3.5K SLoC

taski

build status test status crates.io docs.rs

待办事项

  • 允许用户指定自定义颜色

  • 也支持动态参数

  • 添加竞争对手库的示例

  • 添加 embedme

  • 添加文档

  • 添加另一个示例

  • 使用 plotters 改进布局库

  • 不:添加调度器的构建器

  • 不:添加调度特质

  • 完成:为不同的策略添加更多测试:fifo、优先级、自定义

  • 完成:使用日志记录

  • 完成:移除 trace 锁?不应该需要

  • 完成:添加对异步闭包/函数的支持

  • 完成:使用 petgraph 进行图表示

设计决策

  • 任务节点是内部的,因为这是状态保持的地方(内部可变性)以及分配唯一索引的地方
    • 用户不能从外部构建
    • 只能使用 add_task 来创建
    • 只有作为依赖项的有效输入(我们知道它已被添加(否则我们不知道)),并且我们知道它不能有循环
    • 用户不能在上面运行任何方法?错误是因为任务特质
  • 使用结果类型,以允许快速失败策略
    • 用户解决方案:使用 infallible 并传播 Option
  • 将输出克隆为输入,这对于像 i32 这样的小型数据更有效
    • 对于大型数据(或无法克隆的数据),只需返回一个 Arc

开发

cargo install cargo-expand
cargo expand ::task

存在许多不同的任务调度器实现,本实现的目的是以下

  • 支持异步任务
  • 支持有向无环图和循环检测
  • 允许基于自定义 ID 类型的自定义调度策略,可以通过标签强制执行复杂约束
  • 允许在调度器执行时并发添加任务,以便可以将任务流式传输到调度器

依赖项

~2.8–6.5MB
~112K SLoC