【问题标题】:java real time design rtsjjava实时设计rtsj
【发布时间】:2023-03-31 23:15:01
【问题描述】:

我正在考虑如何使用 java不使用 Sun Real-time System API 来构建实时系统。

比如说,老板在上午 11:00 生成一个事件,他必须在上午 11:10 获得反馈。如果没有任何反馈,他将重新发送他的活动。

员工在上午 11:01 收到老板的活动,他必须留出 1 分钟的时间将结果发送回老板。所以实际上他有 8 分钟的时间来完成他的工作。上午 11 点 09 分,无论他完成与否,他都必须发送反馈。

这是一个实时系统,不是吗?

在这种情况下,如何使用 java 设计我们的系统?这是一种生产者-消费者模式。在消费者端,使用哪个对象(blockingqueue、delayqueue ...)来满足这个要求?

欢迎任何网络链接,开源。

谢谢。

【问题讨论】:

  • 这真的是对问题的描述还是只是一个比喻?
  • 您还需要扩展它的实时性。硬实时和软实时是有区别的。例如,汽车制动系统是硬实时的(如果响应时间太慢,将是灾难性的),而手机传输可能是软实时的(质量下降,但不是灾难性的)。此外,实时只是意味着在一组有保证的时间限制内运行。您的系统是否真的需要实时,或者只是接近计划(例如,它可能会关闭几毫秒)?
  • 老板是否关心反馈是否恰好在 11:00:00,而不是 之后或之前 的微秒?如果是,那么它是实时的,您无法承受 JVM 的非确定性行为。如果在初始电子邮件和 11:00:59 之间的任何时间回复都可以接受,那么它不是实时的。
  • 老板必须在上午 11:10 之前知道结果。如果是在上午 11:10 之前,为什么它不是实时系统?
  • Java(没有 RTS)完全无法保证任何事情都会在特定时间点或之前发生。我们可以基于底层平台设计良好且行为公平的知识做出安全的假设,但这与声称系统实际上是实时的方式不同,即确保机器人手臂准备好螺栓的计算机当汽车底盘在装配线上滚动时,车轮是实时的。

标签: java real-time real-time-java


【解决方案1】:

您无法在 Java 中进行真正的计算机工程意义上的实时编程。您受制于线程调度程序和具有完全未知的底层属性的操作系统。如果操作系统想等到 11:20 才回来给 JVM 一些 CPU 时间,那就是它的业务。

如果您以 Microsoft 的方式表示“实时”,例如“事物的响应速度非常快,我们小心翼翼地永远不会阻塞主 UI 线程”,那么这并没有明确的技术含义。它只是意味着“架构面向用户的代码,以呈现他们不必在计算机上等待的外观。”

--根据评论进行编辑。

如果到 11:08 您的意思是“在 11:07:59 和 11:08:01 之间”,那么普通的 java 通常可以在现代平台上通过仔细编程为您做到这一点。它无法提供的是在 11:08:01 发生的事件被视为平台缺陷的情况,它只是不能保证。

当我们说“实时”以及 RTS API 的用途时,情况更像是“焊接头必须在这一毫秒内处于这些坐标,如果延迟超过半毫秒,则零件将有缺陷,如果提前超过 2 毫秒,价值 300,000 美元的伺服工作台就会撞到它的轴承上,并导致价值 10,000,000 美元的装配线停机。”

【讨论】:

  • 在我看来,实时只是意味着它一定会在预定义的时间段内得到响应。此外,JVM 暂停时间可以调整。
  • 在你的定义中,我会怀疑即使是 RTS API 也无法实现。 C++ 可以做到这一点吗?
  • 它取决于底层平台,而不是特定的编程语言。当然,RTOS 上的 C++ 可以。请注意,Java RTS 仅在少数非常特定的操作系统上受支持。是的,我的例子很极端,肯定会用 C 甚至微控制器的本机汇编程序来实现,重点是说明“实时”的工程意义,这就是 RTS API 旨在添加到 Java 中的内容。
【解决方案2】:

你描述的系统可以用JMS解决。

使用发布-订阅 JMS 队列来分配工作。 “老板”是出版商。每个员工都是一个“订阅者”。

“老板”需要将其发布的每条消息存储在“检查”区域(可能是一个列表)中,并设置一个 10 分钟的计时器。当它收到对消息的响应时,它将清除计时器并将消息从“check back”区域中删除。

【讨论】:

  • JMS 系统是非确定性的。而且性能不好。在我看来,Socket 会更好。客户端会在一定的时间段内对服务器进行扫描,并通过socket将结果发送回Boss。
猜你喜欢
  • 1970-01-01
  • 2011-05-02
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
相关资源
最近更新 更多