【问题标题】:How do I do realtime programming in Rust?如何在 Rust 中进行实时编程?
【发布时间】:2013-10-26 22:58:51
【问题描述】:

我正在将 Rust 视为硬实时编程中 C/C++ 的替代品。我发现了两个可能的问题:

1) 如何避免调用 Rust 的 GC?我已经看到建议我可以通过简单地避免托管指针和非实时安全库(例如 Rust 的标准库)来做到这一点——这足以保证我的实时任务永远不会调用 GC 吗?

2) 如何将我的实时任务映射到操作系统线程?我知道 Rust 的标准库实现了 N:M 并发模型,但实时任务必须与一个 OS 线程直接对应。有没有办法产生这种类型的线程?

【问题讨论】:

    标签: real-time rust


    【解决方案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 才能工作)。

    【讨论】:

    • 我对@9​​87654331@的理解是它适用于整个箱子。我可以将 #[no_std] crate 中的实时代码编译到库中,然后将其与我的应用程序的其余部分链接,这样我就可以将 Rust 的运行时和标准库用于非实时代码吗?
    • 它是板条箱范围的;是的,这可能是可能的,但我从未尝试过。
    • 谢谢。我继续学习了足够多的 Rust 来测试它,并且它有效。如果我认为它会这么简单,我早就自己测试了。
    猜你喜欢
    • 2022-11-26
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2019-01-19
    • 2012-05-17
    • 1970-01-01
    • 2011-01-02
    相关资源
    最近更新 更多