大量scala参与者的gc

大量scala参与者的gc,scala,garbage-collection,actor,Scala,Garbage Collection,Actor,如果我想实现am http服务器 我根据请求创建新的参与者。所以它可以随着我的cpu的更新而扩展 但它会导致内存使用问题吗?据说演员在gc时有一些奇怪的行为。 代码将以某种方式如下所示: class Worker extends Actor { def act = react { case req : Request => perform(req);exit() } } class HttpEventHandler{ def onConnect(co

如果我想实现am http服务器

我根据请求创建新的参与者。所以它可以随着我的cpu的更新而扩展

但它会导致内存使用问题吗?据说演员在gc时有一些奇怪的行为。 代码将以某种方式如下所示:

class Worker extends Actor {
    def act = react {
       case req : Request => perform(req);exit()
    }
}


class HttpEventHandler{
   def onConnect(conn) = {
       new Worker ! createRequest(conn)
   }      
}
编辑:我对此做了一个测试,详细检查了我的测试,几年前使用Scala的内置actor库提升,这促使他们编写了自己的actor库。我不知道Scala的内置演员是否仍然存在与Lift社区当年经历的问题相同的问题。你必须自己做测试才能找到答案。(或者有最近经验的人可以插话)

我建议你去图书馆看看。总的来说,我认为这是对Scala内置实现的改进。它甚至还有一个函数,它与您在这里所做的完全相同(创建一个参与者来处理单个消息并死亡)

编辑:

您的代码列表特别可能会泄漏参与者,因为您在处理完参与者后没有显式地
exit()
您的参与者

编辑2:


事实证明Scala本身有一个函数(感谢Stefan)。我不知道它的性能是否比Scala actor更好。

我确实有一个关于spawn的测试,该测试在没有内存泄漏的情况下运行得很好。Scala内置的actor仍然不能工作。我在测试中遇到了一个OutOfMemory。@jilen实际上,你的OOM可能是因为当你处理完你的演员时,你没有调用
exit()
。我已经调用了exit,请看它是用中文写的,但只看代码,diagramScala还提供了一个可以以同样方式使用的生成方法。看见