Scala 一个Akka演员应该做多少处理?

Scala 一个Akka演员应该做多少处理?,scala,akka,actor,Scala,Akka,Actor,我必须定期(10分钟、30分钟、60分钟…)进行一些处理(运行一些作业)。我每个人都有不同的演员。我正在向参与者内部的self发送消息以触发处理。在某些情况下,在参与者内部完成的处理可能需要10到30秒或更长的时间。从演员设计的角度来看,我的问题是演员内部的处理有多“重”?或者这并不重要 让演员花任意长的时间处理一条消息是可以的。但是你不希望在一个负责及时处理进一步消息的参与者身上这样做 一种常见的模式是让经理参与者接收消息并将工作分配给工人参与者。如果工作者角色需要很长时间,这没有问题,因为经

我必须定期(10分钟、30分钟、60分钟…)进行一些处理(运行一些作业)。我每个人都有不同的演员。我正在向参与者内部的self发送消息以触发处理。在某些情况下,在参与者内部完成的处理可能需要10到30秒或更长的时间。从演员设计的角度来看,我的问题是演员内部的处理有多“重”?或者这并不重要

让演员花任意长的时间处理一条消息是可以的。但是你不希望在一个负责及时处理进一步消息的参与者身上这样做

一种常见的模式是让经理参与者接收消息并将工作分配给工人参与者。如果工作者角色需要很长时间,这没有问题,因为经理角色可以在需要时创建另一个工作者角色

想一想什么需要反应,什么需要很长时间,并确保某个特定的演员不会同时做这两件事


但是,如果你有需要做的事情需要30秒,你可能想把它分解成多个参与者,这样多个核心可以并行工作。另一种常见的模式是,给一个参与者一个任务,看看它有多大,如果它超过了某个阈值,就产生多个参与者,并给任务的每个部分分配任务。然后,这些演员中的每一个都做同样的事情,决定是自己做这项工作,还是将工作分配给一些儿童演员。这样,根据作业的大小动态地形成参与者树,当作业完成时,参与者消失。

参与者逐个处理消息。这没关系,除非你们给演员发了太多的信息,占用了太多的内存。使用参与者挂起实际处理;-)@所以,基本上你可以说,演员内部所有繁重的处理都应该在“未来”中完成。对吗?@soumyasmanta我想说一些重要的无状态处理应该在未来内部完成,而不是一些工人actorI不会说你应该总是使用未来而不是演员来转移工作。使用子参与者的好处可能来自位置透明性,而不一定来自参与者提供的邮箱方法。这不是未来会给你的东西。Akka的参与者方法比参与者本身更重要(远程处理/集群、路由等)。我不同意使用未来来处理繁重的处理。您仍然需要某种形式的背压处理,以便不会使CPU或堆空间过度饱和,尤其是在贫血的VPS上运行时。我认为工作拉动模式在这种情况下要优越得多。