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

Scala,Actors,未读收件箱邮件会发生什么?

发布时间:2020-12-16 18:59:48 所属栏目:安全 来源:网络整理
导读:Scala Actors中未读收件箱邮件会发生什么?例如两种情况:1.如果忘记为特殊消息实现反应案例:actor!NoReactCaseMessage2.如果消息过快:(timeOfProcessingMessage timeOfMessageComes) 如果发生第一种或第二种情况,它会堆叠在内存中吗? 编辑1有没有机制看
Scala Actors中未读收件箱邮件会发生什么?例如两种情况:1.如果忘记为特殊消息实现反应案例:actor!NoReactCaseMessage2.如果消息过快:(timeOfProcessingMessage> timeOfMessageComes)
如果发生第一种或第二种情况,它会堆叠在内存中吗?

编辑1有没有机制看到这种类型的内存泄漏发生?也许,控制未读消息的数量然后进行一些垃圾收集或增加演员池.如何获取未读邮件的数量?这种内存泄漏如何在其他语言中解决?比如在Erlang?

解决方法

邮箱是一个队列 – 如果没有任何东西从队列中提取消息(即如果你的react或receive循环中的部分函数为isDefinedAt返回false),则消息就会保留在那里.

严格来说,这是一个内存泄漏(你的应用程序),虽然它的严重性取决于这些未读消息的数量如何增长(显然).例如,我经常使用actor来合并重放查询和由序列号标识的消息的“实时流”.我的反应如下:

var lastSeq = 0L
loop {
  react {
    case Msg(seq,data) if seq > lastSeq => lastSeq = seq; process(data)
  }
}

这包含内存泄漏,但不是“严重”内存泄漏,因为重复消息的数量将存在上限(即,一旦重放查询完成,就不会有更多内容泄漏).

然而,这可能仍然是一个烦恼,因为对于每个反应,演员子系统将再次扫描这些消息以查看它们是否可以被处理.

事实上,考虑一个真正的邮箱可能是一个很好的类比.想象一下,你把所有的垃圾邮件留在那里:很快,你就会因为所有垃圾邮件而遭受饥饿,你必须筛选才能获得信用卡声明.

(编辑:李大同)

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

    推荐文章
      热点阅读