2011-11-01 36 views
6

如果我想实现http服务器。gc的scala actor数量较多

我为每个请求创建新的actor。所以它可以随着我的cpu更新而扩展。

但它会导致内存使用问题?据说演员在gc时有一些奇怪的行为。 代码会莫名其妙地像:

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


class HttpEventHandler{ 
    def onConnect(conn) = { 
     new Worker ! createRequest(conn) 
    }  
} 

编辑:我做了这个测试,检查我的测试详细http://jilen.iteye.com/blog/1231178

回答

3

电梯had some problems使用Scala内置的演员库几年前,这促使他们编写自己的演员库。我不知道Scala的内置演员是否仍然存在Lift社区所经历的相同问题。你必须做自己的测试才能发现。 (或者,也许最近有经验的人可以参加)。

我确实建议查看Akka Actors库。总的来说,我认为这是对Scala内置实现的改进。它甚至有一个spawn函数,它正是你在这里做的(创建一个actor来处理单个消息并死掉)。

编辑:

特别是你的代码清单可能会泄漏的演员,因为你没有明确exit()你的演员,当你与他们进行。

编辑2:

原来,斯卡拉本身具有spawn功能(感谢斯蒂芬)。我不知道它是否比Scala演员的表现更好。

+0

我确实有一个关于产卵的测试,它完美地工作在内存泄漏方面。 – jilen

+1

和斯卡拉内置演员仍然没有工作。我在测试中遇到了OutOfMemory。 – jilen

+0

@jilen其实,你的OOM可能是因为当你完成演员时你没有调用exit()。 – leedm777

相关问题