推荐的.NET软实时系统是什么?

3

我对在 .Net 3.5/4 WinForms 主要是 WPF 中软(硬)实时应用程序的全面信息感兴趣。Google 搜索结果相当差 - 只有一些关于并行性的指南...问题是,例如如何编写实时的病人健康监测客户端来监控某种医疗设备?或者具有实时股票数据的经纪人应用程序?或者火车导航系统?或者负责打开/关闭门的家庭自动化软件?等等... 因此,这种实时应用程序是目标。

到目前为止,我还没有找到任何与此相关的书籍,除了《Windows 并发编程》,该书基本上不涉及此问题,而更多地处理并行性处理...

提前致谢

4个回答

5
我的个人感觉是,如果你的需求是实时软件,那么你不应该使用.net。
.net使用的虚拟机并不适用于实时应用程序。例如,你无法预测垃圾回收器何时运行以及需要多长时间。如果这发生在关键时刻,你的实时软件将不再是实时的。
[编辑:抱歉,我知道这并没有真正回答你的问题,但我认为这可能是你在寻找相关信息时遇到困难的原因——因为没有人这样做。如果你正在编写实时软件,你应该考虑使用C或C++。如果很关键,可以使用专门的确定性实时操作系统。甚至可以使用专门设计用于实时的语言。]

你无法预测垃圾回收器何时运行,但你可以阻止它在关键区域运行。 - Mark
@Mark:很赞。我不知道那是怎么回事。你有例子吗? - Simon P Stevens

2
在我们公司中,我们开发了一个基于C#和C++/CLI的电话IVR服务器。它每年处理数百万通电话,24/7运行,从未崩溃,并且通常与我们的期望一样健壮。它没有任何花哨的功能,只是一个普通的Windows服务。虽然速度、效率和响应时间显然是我们的目标,但它不会像尝试控制GB等那样做任何神秘的事情。
然而,有一个很大的问题。由我们的应用程序控制的硬件驱动程序显然不是.NET的。因此,在最低层面上,我们不需要担心不想要的GBC等问题,所有毫秒级依赖性的内容(如IP电话数据包的转发或语音流处理)都由我们电话板上的固件处理。
因此,总结以上内容:我甚至不会考虑在.NET中编写驱动程序或非常低延迟的代码,但我肯定会在.NET中编写控制代码/逻辑。
不幸的是,我无法指向任何有用的资源,因为我也从未遇到过这种情况,但我希望这个用例将帮助您对是否应该考虑.NET进行实时项目做出明智的决策。

1

我不同意@Simon的观点,你可以使用Windows和.NET构建实时系统。你可能无法构建非常特定的硬实时系统,但是通过适当的设计和测试,你可以做到,而且我已经做到了。

有许多技术可以将硬实时要求推向软件解决方案或硬件,例如运动/IO控制器。Windows/.NET使得系统开发比RTOS开发更容易,并且可以解决少数时间关键元素。我的方法是首先解决这些时间关键问题并进行测试。


也许可以通过特殊的硬件或软件解决方案来调用 .net 框架之外的内容。但我无法想象如何完全在 .net 中实现实时应用程序。CLR 不够确定性。你怎么能保证 CLR 加载时间、程序集分辨率、JIT 编译?更不用说 CLR 在不同情况下进行不同的优化了。我相信通过外部调用来完成关键任务是可能的,但是完全使用 .net 呢?(我不是在谈论简单的“实时查看”应用程序,我是在谈论有特定时间限制要求的“实时”应用程序) - Simon P Stevens
这不是我的专业领域,所以如果你已经完成了100%的.NET实时应用程序,我会相信你的话。知道这一点会很好。 - Simon P Stevens
Simon,这是关于设计的问题。在开发实时系统时,你要尽量避免任何动态操作,比如加载程序集、内存分配等等……至少在时间关键的代码中要避免。 - kenny
但这不是问题吗?在 .net 中,你无法避免 CLR 托管内存分配。我想你的意思是在关键区域避免它,这是公平的,我猜。 - Simon P Stevens

1

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

这篇 MSDN文章提供了一些有关并行计算的好链接。

也许智能客户端软件工厂可能是一个很好的参考实现,供您开始调查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接