gpt4 book ai didi

events - 状态机将事件推送到自己的事件队列

转载 作者:行者123 更新时间:2023-12-05 00:29:25 24 4
gpt4 key购买 nike

我目前正在研究分层状态机(UML 状态机、状态图等),以下我不清楚:

在转换期间和从状态将事件推送到机器自己的事件队列是否有效,如果是,它在实践中是否安全使用还是应该避免?这样做是否有某些含义(至少是实现怪癖,正交区域发挥作用时的问题,或类似的)?

我将用两台虚拟机器来说明这个问题:

  • 以下机器将处于状态 A等待事件A_to_B ,之后它会通过将事件作为转换 Action 分派(dispatch)来进入无限循环:
          +-----+                    +-----+                    +-----+
    | A | A_to_B / | B | B_to_C / | C |
    |-----| dispatch B_to_C |-----| dispatch C_to_A |-----|
    O---->| +------------------->| +------------------->| |
    | | | | | |
    +-----+ +-----+ +-----+
    ^ C_to_A / |
    | dispatch A_to_B |
    +-----------------------------------------------------+
  • 通过将事件作为入口操作分派(dispatch),以下机器将立即进入无限循环:
          +-------------------+           +-------------------+           +-----+
    | A | | B | | C |
    |-------------------| A_to_B |-------------------| B_to_C |-----|
    O---->| on entry: +---------->| on entry: +---------->| |
    | dispatch A_to_B | | dispatch B_to_C | | |
    | | | dispatch C_to_A | | |
    +-------------------+ +-------------------+ +-----+
    ^ |
    | C_to_A |
    +---------------------------------------------------------------+
  • 最佳答案

    状态机可以向自身发布事件,但这有特殊目的,例如将较长的运行完成 (RTC) 步骤分解为较短的部分。您可能希望这样做以在您的 RTC 步骤太长之间启用系统中的其他状态机(或更一般地事件对象)的调度。

    具体到您的示例,在这种情况下,我会尽量避免向 self 发布事件。通常我看到人们在混淆状态图和流程图时会这样做。状态图需要事件从一个状态转换到另一个状态。完成框中指定的计算后,流程图会自动从一个处理框转换到另一个处理框。显然,当您向自己发布事件时,您会将状态图变成流程图。所以,你真的需要流程图而不是状态图,因为你真的不需要等待任何东西。您继续全速处理。

    您也可以这样查看。事件的目的是为状态机提供新信息。这就是状态机“学习”的方式。但是,当您向自己发布事件时,您不会获得任何新知识。您需要的所有知识都已由原始“真实”事件提供。因此,您有足够的信息在一次转换中执行所有这些处理,而不是将其分散在许多“状态”中,这些“状态”实际上是这个冗长处理的阶段。

    关于events - 状态机将事件推送到自己的事件队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17253220/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com