推荐.Net软实时

Posted

技术标签:

【中文标题】推荐.Net软实时【英文标题】:Recommended .Net soft real-time 【发布时间】:2010-11-05 02:45:19 【问题描述】:

我有兴趣在 .Net 3.5/4 Winforms 中获取有关软(也硬)实时应用程序的全面信息(可能是 WPF)。谷歌的结果很差 - 一些仅关于并行性的问题......问题是我如何为某些医疗器械编写实时患者健康监控客户端?或具有实时股票数据的经纪人应用程序?还是火车的导航系统?还是负责打开/关闭门的房屋自动化软件?等等......所以这种实时应用程序是目标。

到目前为止,我还没有找到任何关于它的书籍,除了 Windows 上的并发编程——基本上不是关于这个,而是并行处理......

提前致谢

【问题讨论】:

【参考方案1】:

我个人的感觉是,如果您的要求是实时软件,那么您不应该使用 .net

.net 使用不适合实时应用程序的虚拟机。例如,您无法预测垃圾收集器何时运行,或者需要多长时间。如果这发生在关键时刻,您的实时软件将不再是实时的。

[编辑:抱歉,我知道这并没有真正回答您的问题,但我认为这可能是您在查找相关信息时遇到困难的原因 - 因为没有人这样做。如果您正在编写实时软件,您可能应该改用 C 或 C++。取决于它的重要性,一个专用的确定性实时操作系统。甚至是在设计时考虑了实时性的特定语言]

【讨论】:

您无法预测垃圾收集器何时运行,但您可以阻止它在关键区域运行。 @Mark:酷。我不知道。你有例子吗?【参考方案2】:

我不同意@Simon,您可以使用 Windows 和 .NET 构建实时系统。您可能无法构建非常具体的困难时间系统,但通过适当的设计和测试,您可以,我也有。

有许多技术可以将硬时间要求推到software solutions 或motion/IO controllers 等硬件上。 Windows/.NET 使系统的大部分开发比 RTOS 开发更容易,并且可以解决少数时间关键要素。我的方法是首先解决这些时间紧迫的问题并进行测试。

【讨论】:

可能使用在 .net 框架之外调用的特殊硬件或软件解决方案。但我看不出你怎么能完全在.net 中做实时应用程序。 CLR 的确定性不够。您将如何获得有保证的 CLR 加载时间、程序集解析、JIT 编译。更不用说 CLR 在不同的情况下进行不同的优化。我确信可以通过外部调用来做关键的事情,但是来自 100% .net? [我不是在谈论简单的“实时视图”应用程序,我是在谈论对要求有特定时间限制的“实时”] 这不是我的特定专业领域,所以如果你做过 100% 的 .net 实时应用程序,我会相信你的话。很高兴知道。 西蒙,这是关于设计的。在开发实时系统时,你会尽量避免任何动态的事情,比如加载程序集、内存分配等……至少在时间关键的代码中避免它。 但这不是问题吗?在 .net 中,您无法避免 CLR 托管内存分配。我想你所说的只是在关键领域避免它,我猜这很公平。【参考方案3】:

在我的公司,我们用 C# 和 C++/CLI 开发了一个电话 IVR 服务器。它每年处理数百万个呼叫,24/7 全天候运行,从不崩溃,并且通常像我们希望的那样强大。它没有什么特别之处,它只是普通的 Windows 服务,虽然速度、效率和响应时间显然是我们的目标,但它并没有做任何深奥的事情,比如试图控制 GB 等。

但是有一个很大的但是。由我们的应用程序控制的硬件驱动程序显然不是.Net。因此,在最低级别,我们不会担心不需要的 GBC 等等,所有与毫秒相关的东西,例如 IP 电话数据包的转发或语音流,都由我们电话板上的固件处理。

总结以上内容:我什至不会考虑在 .Net 中编写驱动程序或非常低延迟的代码,但我肯定会在 .Net 中编写控制代码/逻辑。

很遗憾,我无法为您指出任何有用的资源,因为我也从未遇到过任何有用的资源,但我希望这个用例能帮助您就是否应该将 .Net 用于您的实时项目做出明智的决定。

【讨论】:

【参考方案4】:

并行和线程是 .NET 提供的一些工具来帮助您编写实时应用程序,但实时系统的体系结构与语言无关。

ThisMSDN 文章有一些很好的并行计算链接。

也许Smart Client Software Factory 可能是您开始调查的一个很好的参考。

【讨论】:

以上是关于推荐.Net软实时的主要内容,如果未能解决你的问题,请参考以下文章

如何给嵌入式Linux打实时补丁?

嵌入式实时系统—软实时和硬实时系统的定义和区别

软中断和实时性

使用 Erlang/OTP 构建容错软实时 Web 应用程序

实时阴影渲染:软阴影

filebeat利用kafka进行日志实时传输