加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 从不是演员的东西发送一个演员的消息是不好的做法吗?

发布时间:2020-12-16 19:05:16 所属栏目:安全 来源:网络整理
导读:假设我有一类具有Actor类型的属性actor_的类.我有问题吗 def someMethod() = { actor_ ! "HELLO"} 或者应该发送一个消息总是从另一个演员完成;例如 def someMethod() = { Actor.actor { actor_ ! "HELLO" }} 解决方法 这取决于.当您从非演员代码向actor发送
假设我有一类具有Actor类型的属性actor_的类.我有问题吗

def someMethod() = {
  actor_ ! "HELLO"
}

或者应该发送一个消息总是从另一个演员完成;例如

def someMethod() = {
  Actor.actor { actor_ ! "HELLO" }
}

解决方法

这取决于.当您从非演员代码向actor发送消息时,ActorProxy将自动创建并存储在本地线程中.这会造成潜在的内存泄漏,尽管这是一个非常小的内存泄漏,因为在线程被GC’之前,ActorProxy将不会被GC’d. ActorProxy本质上使非演员线程在许多方面都像Actor一样,包括接收消息.

更大的问题是,如果您的线程被管理,类似于actor库管理线程的方式,以便代表逻辑上下文的代码可能同时在一个线程上,而在另一个线程上.一个很好的例子就是一个servlet容器.您的逻辑上下文可能是一个servlet或一个会话,但是ActorProxy将被绑定到线程,从而在逻辑上下文中共享.如果你的演员没有回答ActorProxy,这不是一件大事,但是如果这样做可能会导致问题,因为(a)答复可能被错误的上下文所接收,或者(b)消息永远不会被接收,因此前面提到的小泄漏成为一个大的一个,因为ActorProxies的邮箱填满了.

[编辑]嗯…我似乎有一个问题阅读问题!在actor块中围绕它创建一个新的actor对象,当它终止时将被正确GC.请记住,将消息发送到actor块意味着消息发送将在另一个线程的新反应中完成,而不是在创建actor的线程中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读