1

我正在考虑如何在没有 Sun Real-time System API 的情况下使用 java 构建实时系统。

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

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

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

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

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

感谢。

4

2 回答 2

3

您无法在 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 美元的装配线中断。”

于 2010-12-15T19:03:36.750 回答
0

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

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

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

于 2010-12-15T18:10:15.797 回答