首页 > 解决方案 > 用 Rust 创建周期性任务的最佳方法是什么?

问题描述

我想在 Rust 中创建一个周期性任务(周期大约 50 毫秒)。理想情况下,我想指定线程的调度策略和优先级。这对 Rust 可行吗?

我找到了最后一个示例来使用 Tokio 库创建一个定期任务。优点是间隔由库处理。与我自己实现间隔处理的std::thread相比,这表现如何?是否有其他有用的板条箱可用于此目的?

这个想法是在这个任务中应该实现一个简单的 PID 控制器。其他并行任务(周期性和非周期性)也是必要的,它们不应中断或延迟 PID 控制器任务。该程序在 Raspberry 4 和 Raspberry OS 上运行。

标签: rust

解决方案


可悲的是,我不能评论少于 50 个代表。所以我希望,答案很好。

如果设置线程的优先级是你唯一关心的=>

正如您提到的,Rust 没有为线程/任务实现任何优先级管理。如果您想要该功能,您可以/应该使用 c 绑定,就像在libc中一样。包装 c 绑定以进行优先级管理的现有 crate 是thread_priority。也许你可以看看那个。

对于调度任务的任何“正常”用例,tokio crate 应该可以正常工作。您甚至可以为错过的报价指定策略。

如果您自己实现该功能,则不会像 tokio crate 那样具有线程池功能,所以我不会这样做。启动会更快,但不像 imo 那样“稳定”。


推荐阅读