В чем разница между актером Акки и моделью актера Скалы - PullRequest
73 голосов
/ 20 февраля 2012

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

Ответы [ 3 ]

58 голосов
/ 20 февраля 2012

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

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

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

  • отправьте сообщения всем, кого они знают о

  • создает новых актеров

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

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

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

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

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

30 голосов
/ 07 сентября 2012

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

6 голосов
/ 07 сентября 2012

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

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

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

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

...