防止设备通信出现瓶颈

时间:2018-05-01 10:37:22

标签: c# .net multithreading performance

我有一个很抽象的问题。我正在开发一个需要不断进行设备通信的项目。我正在将多个设备集成到带有触摸屏的外部处理单元上,以执行某些方法。即触摸屏上的“启动视频通话”按钮可激活继电器,打开显示设备,摄像设备和麦克风设备等。

另一方面,我也试图监控这些设备。他们目前的状态如何?它们是启用/禁用的吗?显示设备当前有什么输入?

到目前为止,我已经提出了两个解决方案,以防止通信中的瓶颈,我一直在轮询(即每两到五秒钟保持一个准确和最新的状态)通态和显示设备的输入状态。

  1. 利用线程,这样我就可以将不同的命令排入队列并执行它们异步。通过同时读取响应异步,所有通信都应该很好地隔开,但我有一个非常“忙”的通信线路,这会对处理单元产生影响。
  2. 在事件的帮助下,显示设备通知处理器它的状态已改变。这会对通信线路造成很大的压力,但我觉得这很容易被打乱。如果设备没有正确地抛出事件(或事件被遗漏),则监视状态与实际状态不对应。
  3. 我很好奇是否有其他方法可以解决这个问题。截至目前,我倾向于第二个,因为它对处理单元的压力要小得多,我只是觉得我应该在很多安全措施中构建,以防止实际设备状态的不正确表示。

    该项目在.Net 3.5上以C#运行。

1 个答案:

答案 0 :(得分:1)

轮询工作,但它不是有趣或最佳。反应性是最好的,但正如你所提到的那样,可能会有一个打嗝,确保你仍在听设备,而不仅仅是袖手旁观。在这种情况下,它自从优化两个过程。当你等待或者没有听到这么长时间的回应时进行轮询,并在你的民意调查返回良好信息时通过民意调查。

那就是说,你不应该担心在各种线程上进行轮询会对单位征税太多。这听起来像一个目的设备,所以只要你没有运行它或一直强调它最大,那么使用你的资源是完全正常的。