Утечки памяти актеров Scala, так ли они плохи, как были, или улучшаются?

В настоящее время я изучаю Scala 2.8, используя Programming in Scala 2nd edition.

Но меня начинают очень беспокоить подобные сообщения Clojure vs Scala.

Так ли плох Scala в отношении утечек памяти, это не первая информация, которую я слышу о проблемах с акторами и утечками памяти.

Это так плохо? новые версии исправляют это в разумные сроки? Собирается ли Akka решить все это, если или когда, если она будет объединена?

Потому что видеть большие проблемы с одной из самых больших сильных сторон Scala (по крайней мере, для меня Erlang, как и актеры, является одной из главных конфет языка), действительно является серьезным недостатком, если они не могут их исправить. и улучшать поверх него.


person Cristiano Fontes    schedule 13.09.2011    source источник
comment
Связан интересный комментарий в ветке списка рассылки, Должна ли родная библиотека акторов Scala быть помечена как устаревшая.   -  person Kipton Barros    schedule 13.09.2011


Ответы (3)


Я знаю людей, использующих огромное количество актеров, поэтому я почти уверен, что утечки памяти не являются широко распространенными.

Были ли у Scala Actors утечки памяти в 2009 году (Scala 2.7.x)? Да, они сделали. Например, SI-1801 и SI-1948.

Прямо сейчас есть три открытых заявки на утечку памяти, которые я смог найти: SI-3467, SI-3920 и SI-3921.

Однако я не согласен с одним вашим комментарием:

одна из самых сильных сторон scala (по крайней мере, для меня Erlang, как и актеры, является одной из главных конфет языка)

Актеры НЕ являются частью языка! Они библиотека! В этом весь смысл Scala, в этом само значение слова «масштабируемый», из которого произошло название Scala: вы можете добавлять подобные вещи через библиотеки.

На данный момент в Scala существует четыре различных реализации актора: основная библиотека, Scalaz, Lift и Akka. У вас нет абсолютно никаких причин привязываться к стандартной библиотеке. На самом деле, одна из проблем с акторами в основной библиотеке заключается в том, что они были написаны больше для того, чтобы доказать, что это можно сделать, чем для решения реальных проблем.

Если вы хотите использовать актеров, используйте Akka. Вы можете использовать его прямо сейчас. Черт, вы даже можете использовать его с Java, если вам нравится синтаксический мазохизм. Akka — превосходная библиотека, которая выходит далеко за рамки простого предоставления акторов и предоставляет все вспомогательные инструменты, чтобы сделать их полезными (например, супервизоры и балансировщики нагрузки), а также другие инструменты для полной поддержки параллелизма, такие как агенты (в стиле Clojure), STM. (на основе Multiverse), интеграция со Spring, Camel, AMQP и т. д.

Сила Scala в том, что ее можно расширять с помощью библиотек. Если вы ограничиваете себя тем, что есть в стандартной библиотеке, вы ее выбрасываете.

person Daniel C. Sobral    schedule 13.09.2011
comment
Спасибо за ответ. Вы правы, мое утверждение было неверным. - person Cristiano Fontes; 14.09.2011

Акку надо попробовать. Он действительно прочный, легкий и настраиваемый. Например, вы можете привязать почтовый ящик размеры (и выбрать, что делать, когда почтовые ящики заполнены).

person paradigmatic    schedule 13.09.2011

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

Если акторы недостаточно быстро извлекают данные из очереди, очередь растет и потребляет память.

Я предполагаю, что реализация с меньшим объемом памяти ограничила бы количество сообщений в очереди одновременно и, таким образом, потребляла бы меньше памяти (но также блокировала бы отправителей сообщений, пока очередь заполнена).

person Arnaud Le Blanc    schedule 13.09.2011