如何在 Rust 中进行实时编程?
Posted
技术标签:
【中文标题】如何在 Rust 中进行实时编程?【英文标题】:How do I do realtime programming in Rust? 【发布时间】:2013-10-26 22:58:51 【问题描述】:我正在将 Rust 视为硬实时编程中 C/C++ 的替代品。我发现了两个可能的问题:
1) 如何避免调用 Rust 的 GC?我已经看到建议我可以通过简单地避免托管指针和非实时安全库(例如 Rust 的标准库)来做到这一点——这足以保证我的实时任务永远不会调用 GC 吗?
2) 如何将我的实时任务映射到操作系统线程?我知道 Rust 的标准库实现了 N:M 并发模型,但实时任务必须与一个 OS 线程直接对应。有没有办法产生这种类型的线程?
【问题讨论】:
【参考方案1】:1) 如何避免调用 Rust 的 GC?我已经看到建议我可以通过简单地避免托管指针和非实时安全库(例如 Rust 的标准库)来做到这一点——这足以保证我的实时任务永远不会调用 GC 吗?
是的,避免 @
将避免 GC。 (Rust 目前实际上并没有实现 GC,所以现在所有代码都会自动避免它。)
2) 如何将我的实时任务映射到操作系统线程?我知道 Rust 的标准库实现了 N:M 并发模型,但实时任务必须与一个 OS 线程直接对应。有没有办法产生这种类型的线程?
@987654321@(@987654322@, function)
(当#10095登陆时,特殊格式将被修复),例如
use std::task;
fn main()
do task::spawn_sched(task::SingleThreaded)
println("on my own thread");
也就是说,Rust 的运行时和标准库还没有为 hard-实时编程设置,但您可以使用 #[no_std]
(example) 运行“runtimeless”你和 C/C++ 完全一样的情况,模语言差异和缺乏标准库(虽然Rust's FFI 意味着你可以相对容易地调用 libc,而rust-core 项目被设计为一个最小的 stdlib,它不'甚至不需要 libc 才能工作)。
【讨论】:
我对@987654331@的理解是它适用于整个箱子。我可以将#[no_std]
crate 中的实时代码编译到库中,然后将其与我的应用程序的其余部分链接,这样我就可以将 Rust 的运行时和标准库用于非实时代码吗?
它是板条箱范围的;是的,这可能是可能的,但我从未尝试过。
谢谢。我继续学习了足够多的 Rust 来测试它,并且它有效。如果我认为它会这么简单,我早就自己测试了。以上是关于如何在 Rust 中进行实时编程?的主要内容,如果未能解决你的问题,请参考以下文章
Rust:一个不再有 C/C++ 的,实现安全实时软件的未来
硬核!Rust异步编程方式重大升级:新版Tokio如何提升10倍性能详解