Утечка памяти у актера Scala, они такие же плохие, как были или улучшаются? - PullRequest
4 голосов
/ 13 сентября 2011

В настоящее время я изучаю Scala 2.8, используя Программирование в Scala 2-й редакции.

Но я начинаю по-настоящему беспокоиться о сообщениях, подобных этому Clojure vs Scala

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

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

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

Ответы [ 3 ]

8 голосов
/ 14 сентября 2011

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

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

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

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

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

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

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

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

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

3 голосов
/ 13 сентября 2011

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

1 голос
/ 13 сентября 2011

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

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

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

...