我想使用一个actor来同步对对象池的访问。参与者将管理池中的对象,包括它们的状态(忙碌与自由分配(。当由非参与者代码ask
时,一旦可用,它将从池中返回一个对象。因此,调用代码具有用于获取要使用的对象的抽象。
为了获得这种抽象,我需要参与者能够使用参与者分配给他们的对象来响应其消息发送者的ask
消息。这是否可以完成,通过消息传递整个对象是否占用大量资源?
返回未来没有错,稍后将由演员完成。
但是,请密切关注此事:您是否会以某种可变的内部参与者状态来完成未来?
如果答案是否定的 - 没关系,没有什么值得担心的。
如果答案是肯定的 - 你必须注意同步,因为actor/外部代码可能会在不同的线程中改变这种状态(这有点违背了使用actor的目的(。
否则它是合法的。
顺便说一句,这不仅仅是特定于期货的东西。对于从演员发送的任何消息,您都必须遵循此消息。
更新:扩展我的答案以解决OP的评论。
问题主要是关于从演员返回一个不是演员的对象,而不仅仅是关于场景......不确定这个答案是否与此有关...一个对象可能比一个"常规"消息重得多......除非 Akka 以等同于参考/实习的方式传递消息。
在 akka 中,对消息的"沉重性"没有特殊要求,一般来说,它可以是任何对象(您可以从以下事实中推断出这一点:Any
用于消息的类型,而不是一些 akka 定义的消息类/特征,具有一组定义的限制(。
当然,您必须处理应保留消息或发送到远程主机的特殊情况,但这是一种特殊情况。在这种情况下,必须确保正确处理序列化。
无论如何,如果消息(对象(没有留下相同 jvm 的边界 - 对象可以保存任意数量的状态。