Как акка сравнима с Эрланг?

Недавно я смотрел на акку, и это довольно впечатляюще. Похоже, что у него есть большинство функций убийцы erlang - прозрачность местоположения, иерархии надзора и многое другое. Есть ли какие-либо функции, которые erlang имеет, что akka не делает?

Ответ 1

Отказ от ответственности: я являюсь PO для Akka

  • Erlang делает копирование при отправке - Akka использует разделяемая память (неизменяемые объекты) для in-VM отправляет
  • Erlang выполняет per-process GC - Akka использует JVM GCs
  • Erlang имеет OTP - Akka интегрируется со всей экосистемой Java (Apache Camel, JAX-RS, и т.д.)
  • Эрланг делает процесс планирование для вас - Akka позволяет вам использовать много разных диспетчеров с бесконечной конфигурацией возможности
  • Erlang делает горячий код reload - Akka может ее поддерживать, но он менее гибкий из-за JVM загрузки классов

Это те, что были у меня на голове.

С другой стороны, использование Akka означает, что вы можете использовать Scala, Java, Groovy или JRuby для написания ваших приложений.

Ответ 2

В Erlang процессы гарантированно переключаются приблизительно каждые 1000 сокращений. В такой наивной структуре, как Scala/агент Акка владеет планировщиком, пока он не завершит работу при приеме. Мат. Игра закончена. Hasta la vista:) Люди, не тратьте свое время на псевдотехников. Я шокировал, что ребята здесь сравнивают Scala с Erlang.

Также есть много других так называемых "функций убийцы", но вот мой совет, не думайте с точки зрения особенностей, не думайте о идиомах, которые позволяют конкретный язык. Scala перехватывает "лучшие функции", Erlang позволяет/реализует вас с правильными идиомами для надежной сборки систем, с языком высокого уровня, который управляется из этих правильных идиом. Когда вы изучаете Erlang, вы восстанавливаете свой ум, свой образ мышления о распределенной надежной системе, Erlang учит вас и обновляет вас. Scala - это еще один императив (о, извините, многопартийный, смешное слово), который пытается украсть хорошие функции с других языков.

Ответ 3

Почти никто не упоминает изоляцию процесса. Без гарантий того, что "ваша нить не может испортить мой мусор", распределенным системам гораздо труднее рассуждать. (Они уже достаточно сложны с процессами Эрланга.)

AFAIK (что недально, учитывая мой ограниченный непосредственный опыт работы с JVM), только Erlang фактически получает "право" процесса на JVM. Г-н Google может дать некоторые подсказки о том, где найти исследования Fox и Candea (?) В исследовательских системах, которые используют технику "микро-перезагрузки" ( "ориентированные на восстановление вычисления" ). Разработчик Erlang читает это исследование и говорит пару вещей:

  • Добро пожаловать в клуб, что заставило вас так долго?
  • JVM делает это ужасно, очень сложно присоединиться.: -)

Ответ 4

Для меня обмен горячим кодом во всем кластере Erlang без времени простоя (например: make:all([netload]) является одной из функций убийцы Erlang.

Но отбросьте свой вопрос: что делает акка, что Эрланг не делает? Конечно, вы можете добавить десятки расширений и библиотек (scala, akka, spring, osgi,...) на Java, чтобы попытаться приблизиться к Erlang. Но где смысл? В сумме все эти расширения намного сложнее, чем изучение простого языка Erlang, который уже более двух десятилетий доказал, что он может выполнять работу с максимальной масштабируемостью с нулевым временем простоя.

Ответ 5

Вероятно, Эрланг лучше для более крупных распределенных систем (после ответа на vjache), но для обычного сервера, когда вы просто хотите использовать всю мощность нескольких процессоров, тогда Akka - хороший выбор - обеспечивает хорошую абстракцию, производительность и интеграцию с экосистемой Java.