我要定期(10分钟,30分钟,60分钟......)进行一些处理(运行一些工作)。每个人都有不同的演员。我正在向演员内的self
发送消息以触发处理。在某些情况下,在演员内部完成的处理可能需要10毫秒到30秒或更长时间。从Actor设计的角度来看,我的问题是,在Actor内部处理的“重”是多少?或者它真的没关系?
答案 0 :(得分:2)
让演员花费任意长时间来处理消息是没关系的。但是你不想在负责及时处理更多信息的演员中这样做。
一种常见的模式是让管理员演员接收消息并将工作场外交给工人演员。如果工作者演员需要很长时间,那就不成问题了,因为经理演员可以在需要的时候简单地创建另一个工人演员。
考虑需要响应的内容以及需要花费很长时间的内容,并确保给定的演员不会同时执行这两项操作。
但是,如果你有事情需要做30秒,你可能想要以某种方式将其分解为多个角色,以便多个核心可以并行工作。另一个常见的模式是让一个演员给出一个任务来查看它有多大,如果超过某个阈值,则会产生多个演员并给出作业的每个部分。然后,每个那些演员都会做同样的事情,决定是自己完成工作还是在一些儿童演员之间分配工作。通过这种方式,演员的树木可以根据作业的大小在飞行中形成,当作业完成后,演员就会消失。