gpt4 book ai didi

scala - 为什么 scala actor 消息队列没有边界(大小)

转载 作者:行者123 更新时间:2023-12-01 09:08:18 25 4
gpt4 key购买 nike

 def append(msg: Msg, session: OutputChannel[Any]) {
changeSize(1) // size always increases by 1
val el = new MQueueElement(msg, session)

if (isEmpty) first = el
else last.next = el

last = el
}

MQueue(actor 的消息队列)的 append 方法没有最大大小。这不会导致内存不足吗?

并查看 changeSize(1)

private var _size = 0

def size = _size
final def isEmpty = last eq null

protected def changeSize(diff: Int) {
_size += diff
}

为什么没有 @volatile 和 private var _size ?
如果附加时间超过 Int.maxValue 怎么办?
我们只是期望那些永远不会发生吗?

最佳答案

对于您问题的第一部分:是的,另请参阅此相关问题 Actors Mailbox Overflow. Scala

我认为 _size 变量没有标记为 volatile,因为这里期望调用方法负责同步。我简要浏览了代码,调用此方法的 actor 库的各个部分确实标记为同步。对于整数溢出:我猜想这永远不会发生。最常用的 actor 库是 Akka,它确实支持有界邮箱,请参阅 this link用于语义和配置。除此之外,它们将替换/合并到 scala 发行版中的 actors 库:as discussed recently on the mailing list .

关于scala - 为什么 scala actor 消息队列没有边界(大小),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7493920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com