我有一个基于Java-Akka的应用程序,其中一个Akka演员告诉另一个Akka演员做某些工作,它开始在命令提示符下完成工作但是如果我给了他10个工作,它一次启动所有工作10命令提示符。 如果我将有100多个工作岗位,那么我的系统将被绞死。
那么如何让我的应用程序一次完成1个工作,所有其他工作应该让CPU处于FIFO(先进先出)方式。
答案 0 :(得分:2)
问题不是很明确,但我试着回答我的理解。
因此,看起来您使用actor作为作业调度程序,将作业消息转换为某些“作业执行程序系统”的调用。每个传入的消息都转换为某个呼叫。
如果这个调用是同步的(当然在与演员合作时闻起来只是为了理解),那么在你的情况下没有问题,你的演员等到呼叫完成,然后继续其邮箱中的下一条消息。
如果该调用是异步的,我猜你有什么,那么所有的消息将被逐个处理而不必相互等待。
因此,您需要限制消息处理,以便一次最多处理一条消息。这可以通过描述here的“拉”模式存档。 你基本上分配了一个主进程,它有一个带有传入消息(作业)的队列和一个工作者,它在没有作业时要求工作。小心主演员的队列 - 你可能不希望它增长太多,考虑监控和应用背压,这是akka-stream所涵盖的另一大话题。