Какая разница в аккорде Акке с моделью Scala Actor

Я обнаружил, что есть актерская модель Akka, поэтому мне интересно, какая разница между Аккой Актером и Scala моделью Актера?

Ответ 1

Ну, нет. Существует только модель Актера, а актеры Акка и актеры Scala - две реализации этой модели.

Все модели Actor говорят, что ваши примитивы concurrency являются актерами, которые могут:

  • получить сообщение и решить, что делать дальше, в зависимости от содержимого сообщения, включая:

  • отправлять сообщения любым субъектам, которых они знают о

  • создать новых участников

и предоставляет определенные гарантии, например:

  • любой актер будет обрабатывать только одно сообщение за раз

  • сообщения, отправленные актером X актеру Y, прибудут в том порядке, в котором были отправлены

Нет разницы между Scala и актерами Akka на этом уровне.

Для различий в том, что они могут сделать, см. Различные Scala Обзор исполнителей актеров. Для меня самым большим является то, что Akka поддерживает супервизоров и ActorRegistry.

Ответ 2

Существует также исторический ответ. Создатели Scala считают, что должна существовать структура актера. Jonas Bonér попробовал это, но не был полностью удовлетворен, поэтому он начал работать над новым, которое превратилось в Akka. Однако люди Scala считали, что это лучше, чем их собственные, поэтому в Jfokus 2011 они объявили, что Akka должен стать стандартной рамкой для актеров Scala. Однако эта миграция займет некоторое время.

Ответ 3

Это немного зависит от того, что вы подразумеваете под "моделью" - вы можете либо обратиться к "модели исполнения", либо к "модели программирования" (и, возможно, к другим моделям).

Для моделей исполнения в основном существуют два: основанные на потоках или основанные на событиях. Библиотека стандартного актера Scala содержит оба. В потоковом потоке используется один поток для каждого актера, тогда как на основе событий используется пул потоков. Первые более понятны, последние более эффективны. Akka построен на основе событий.

Для модели программирования существует большая разница между стандартной библиотекой Scala и Akka. В стандартной библиотеке Scala вы в основном реализуете метод "run" - и если вы хотите дождаться входящего сообщения, вы попадаете в состояние ожидания (путем вызова "получать" или "реагировать" ). Итак, модель программирования следует за "потоковой метафорой". Однако в Akka метафора программирования состоит в том, что вы реализуете несколько методов жизненного цикла, но метод "run" написан внутри рамки. На самом деле получается, что эта модель программирования работает намного лучше с моделью выполнения на основе событий.

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