0

我有一个基于 Java-Akka 的应用程序,其中一个 Akka 演员告诉另一个 Akka 演员做某项工作,它开始在命令提示符下做这项工作,但如果我给他 10 个工作,它会在 10 个命令提示符下一次启动所有工作. 如果我将拥有 100 多个工作,那么我的系统将被挂起。

那么我怎样才能让我的应用程序一次完成一项工作,而所有其他工作都应该以 FIFO(先进先出)的方式获得 CPU。

4

1 回答 1

2

这个问题不是很清楚,但我试着用我的理解来回答。

因此,看起来您使用 actor 作为作业调度程序,它将作业消息转换为对某些“作业执行器系统”的调用。每个传入的消息都被转换为某个呼叫。

如果此调用是同步的(当然在与演员合作时会闻到气味,但只是为了理解),那么在您的情况下没问题,您的演员会等到调用完成,然后继续其邮箱中的下一条消息。

如果该调用是异步的,我猜你有什么,那么所有消息将被一一处理,而无需相互等待。

因此,您需要限制消息处理,以便一次最多处理一条消息。这可以通过此处描述的“拉”模式存档。您基本上分配了一个主actor,它有一个带有传入消息(作业)的队列和一个工人actor,它在没有作业时请求作业。小心 master actor 中的队列 - 你可能不希望它增长太多,考虑监控和应用背压,这是akka-stream涵盖的另一个大主题。

于 2015-12-29T07:51:44.077 回答