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