gc большего количества актера скала - PullRequest
6 голосов
/ 01 ноября 2011

, если я хочу реализовать http сервер.

я создаю нового актера для каждого запроса.Так что он может увеличиваться по мере обновления моего процессора.

но вызовет ли это проблему с использованием памяти?Говорят, что актер ведет себя странно, а 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

1 Ответ

3 голосов
/ 01 ноября 2011

Lift имел некоторые проблемы со встроенной актерской библиотекой Scala пару лет назад, что побудило их написать свою собственную актерскую библиотеку.Я понятия не имею, имеют ли встроенные актеры Scala те же проблемы, с которыми тогда сталкивалось сообщество Lift.Вы должны будете сделать свое собственное тестирование, чтобы выяснить это.(Или, может быть, кто-то с недавним опытом может присоединиться).

Я рекомендую проверить библиотеку Akka Actors .В целом, я думаю, что это улучшение встроенной реализации Scala.Он даже имеет функцию spawn, которая делает именно то, что вы делаете здесь (создание актера для обработки одного сообщения и смерти).

Редактировать:

Ваш кодовый список, в частности, вероятно, утечет актеров, так как вы явно не exit() своих актеров, когда вы закончите с ними.

Edit 2:

Оказывается, что в самой Scala есть функция spawn (Спасибо, Стефан).Я не знаю, ведет ли он себя лучше, чем актеры Scala.

...