Scala-Actors, это хорошая практика, чтобы избежать утечек памяти? - PullRequest
1 голос
/ 19 сентября 2011

Все началось с вопроса " Scala, Актеры, что происходит с непрочитанными входящими сообщениями? ".Я думал, как избежать таких проблем в большой системе со многими актерами.

Я обнаружил, что пишу что-то вроде этого:

react {
  //all cases
  case any: AnyRef => logMessageWithoutCase(any)
}

Это хорошее предотвращение от утечек памяти или оно имеет некоторыепобочные эффекты?

ОБНОВЛЕНИЕ 1 Спасибо @Alexey Romanov и @Luigi Plinge, если в системе появится какой-нибудь спам-актер?Примерно так:

react{
  //all cases
  case msg: Any => Spam!msg
}

И, наконец, в спам войдет или сохранится в базе данных.Я думаю, это более интуитивное решение.

Ответы [ 2 ]

2 голосов
/ 22 сентября 2011

Вы можете также исследовать использование Актеров Akka , которые не страдают от этой проблемы, поскольку они обеспечивают обработку сообщений в последовательности.Здесь необработанные сообщения передаются обратному вызову unhandled(), который по умолчанию регистрирует и выдает исключение.

Еще одна вещь, которую следует учитывать, - это то, что актеры Akka заменит текущий пакет scala.actor в среднесрочной перспективе.Это будет особенно полезно для больших систем со многими актерами, потому что нынешние актеры Scala не такие легкие, как актеры Akka.

2 голосов
/ 19 сентября 2011

Регистрация сообщений является побочным эффектом :) Поскольку при ведении журнала, вероятно, требуется запись на диск или в базу данных, если у вас много несопоставленных сообщений, это может привести к снижению производительности. В противном случае да, это хороший способ избежать утечек памяти.

...