我不了解关于状态机(14.2.3.9.1 UML 2.5规范)的范式运行完成。有一次他说:
“运行到完成意味着,在没有异常或异步销毁上下文分类器对象或StateMachine执行的情况下,仅在前一个事件的处理完成并且稳定状态之后才调度待处理的事件发生已达到配置。即,当StateMachine执行忙于处理前一个时,将永远不会调度事件发生“
和另一个:
“实施注释。运行到完成通常被错误地解释为暗示执行的StateMachine不能被中断,当然[当然?NDR]会导致某些时间敏感系统中的优先级反转问题。但是,情况并非如此;在给定的实现中,执行 StateMachine步骤的线程可以被挂起,允许更高优先级的线程运行,并且一旦它被底层线程再次分配处理器时间调度程序,它可以安全地恢复执行并完成其事件处理“
那么,是否有可能中断状态机?新的高优先级事件可以中断当前事件调度吗?
由于
莫罗
答案 0 :(得分:4)
实施说明涉及更高层次的硬件或软件实施。完成仅对状态机的上下文有效。该机器可以在全局上下文中运行,该全局上下文可以允许中断状态机的处理。但是状态机不会注意到这种中断,并且从它自己的观点来看它仍然继续处理。因此,如上所述,唯一的问题是状态机个人手表将不会连续运行,但会有不规则的跳跃。在正常的业务流程中,这可以忽略不计,但在处理实时处理时,您可能会遇到麻烦。
答案 1 :(得分:0)
“当StateMachine执行忙于处理前一个事件时,永远不会调度事件发生”意味着StateMachine将不会从其队列中选择下一个事件,直到完成“运行到完成”步骤。这不会阻止状态机本身或其他状态机将其他事件发送到其队列中,而运行完成步骤正在运行。 此外,在同步操作呼叫的情况下,可能会暂停运行到完成步骤;当操作调用完成时(可能返回一个值),稍后将恢复运行到完成步骤。