сбор большего количества участников scala

#scala #garbage-collection #actor

#scala #сбор мусора #актер

Вопрос:

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

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

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

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

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

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

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

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

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

Комментарии:

1. у меня есть тест на spawn, который отлично работает без утечки памяти.

2. и встроенный актер scala все еще не работает. В моем тесте я перенес OutOfMemory.

3. @jilen На самом деле, ваш ООМ может быть вызван тем, что вы не вызываете exit() , когда закончите со своим актером.

4. я вызвал выход, см. jilen.iteye.com/blog/1231178 он написан на китайском языке, но просто посмотрите на код и диаграмму

5. Scala также предоставляет метод spawn, который можно использовать таким же образом. См . scala-lang.org/api/current/scala/concurrent/ops $.html