2011-11-01 39 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

相關問題