我应该只使用现代的Akka从演员内部发送演员信息吗?

时间:2014-05-21 15:10:25

标签: scala actor

关于Actor Worst Practices的问题,其中一位answers说:

  

始终从Actor子系统线程发送消息。如果这意味着   通过Actor.actor方法创建一个瞬态Actor然后就这样吧:

case ButtonClicked(src) => Actor.actor { controller ! SaveTrade(trdFld.text) }

答案写于2009年。这目前是一个好习惯吗?它适用于Akka演员吗?

我认为我的问题不是Is it bad practice to send an actor a message from something which is not an actor?的重复,因为这是指演员系统的较旧实现。它确实解释了“最差实践”背后的理由。

1 个答案:

答案 0 :(得分:4)

不,Akka没有旧Scala演员所拥有的问题,可能会为每个线程创建ActorProxy,然后在其不断增长的邮箱中泄漏内存。

让我们看一下!

def !(message: Any)(implicit sender: ActorRef = Actor.noSender): Unit

如果您要发送邮件,并且您不在另一个Actor内,则发件人默认为Actor.noSender。引用文档:

  

默认占位符(null)用于"!"表明没有   邮件的发件人,将被转换为收件人   系统的死信。

如果您要发送的演员试图回复,您将收到死信。如果需要,可以记录这些,但它们不会导致内存泄漏。