我正在编写一个计算引擎(实现为 Akka Actors),它将使用一些异步和并发的 Actor 来执行一些数据检索以及计算的某些部分。
当主要参与者收到开始计算的消息时,它必须在执行计算之前从数据库中检索三个不同的数据。为了进行数据检索,我启动了 3 个演员,每个演员用于数据检索。
在继续下一步之前,我需要所有三个数据集。但是,因为它们是异步和同时检索的,所以我无法知道哪个会首先返回。
我的第一直觉是在我的主要参与者中为每个进程维护一个标志(布尔值)。当每个子actor发回数据集时,我的主要actor中的相应标志设置为true,并且检查其他两个标志以查看是否准备好继续前进。
随着我对 FSM 的了解越来越多,我相信这可能适合我正在做的事情。然而,我的一些“状态”可能同时存在。例如,状态“WaitingForData1”、“WaitingForData2”和“WaitingForData3”可以/将全部共存。在 FSM 中,这似乎不是正确的做法。另一种方法是为其他状态的每个渗透创建一个状态。例如:
- 状态 1:等待数据 1、数据 2 和数据 3
- 状态 2:数据 1 就绪,等待数据 2 和数据 3
- 状态 3:数据 2 就绪,等待数据 1 和数据 3
- 状态 4:数据 3 就绪,等待数据 1 和数据 2
- 状态 5:数据 1 和数据 2 就绪,等待数据 3
... - 状态 N:数据 1、数据 2 和数据 3 就绪
对于我正在做的事情来说,这似乎有点矫枉过正,但实际上可能是实现使用异步和并发进程的 FSM 的最佳方式。
非常感谢您 FSM 专家的任何建议。