Ця відповідь насправді не моя. Його випустив Віктор Кланг (зі слави "Акка") за допомогою Девіда Поллака (зі слави "Ліфт"), Джейсона Заугга (зі слави "Скалаза"), Філіпа Халлера (зі слави "Актори" Скала ").
Все, що я тут роблю, - це форматування (що було б простіше, якщо таблиці підтримували Stack Overflow).
Є кілька місць, які я заповню пізніше, коли у мене буде більше часу.
Філософія дизайну
Актори Scalaz
Мінімальна складність. Максимальна загальність, модульність та розширюваність.
Підніміть акторів
Мінімальна складність, збір сміття від JVM, замість того, щоб турбуватися про явний життєвий цикл, поведінку в роботі з помилками, що відповідає іншим програмам Scala та Java, легкий / невеликий розмір пам'яті, поштова скринька, статично схожа на акторів Scala та Erlang, висока продуктивність.
Актори Scala
Надайте повну модель актора Erlang у Scala, легкий / невеликий розмір пам'яті.
Акка Актори
Простий і прозоро розподіляється, високопродуктивний, легкий і дуже пристосований.
Версія
Актори Scalaz Актори Ліфт Актори Scala Actors Akka Actors
Поточна стабільна вер. 5 2,1 2,9,0 0,10
Мінімальний Scala ver. 2,8 2,7,7 2,8
Мінімальна версія Java. 1,5 1,5 1,6
Підтримка моделі актора
Актори Scalaz Актори Ліфт Актори Scala Actors Akka Actors
Породжують нових акторів Так Так Так Так
всередині актора
Надіслати повідомлення так Так Так Так
відомий актор
Зміна поведінки Діючі особи Так Так: вкладені Так:
для наступного повідомлення незмінна реакція / отримання стати / неприйнятим
Нагляд не передбачений Ні Актор: Так, так
(link / trapExit) Реактор: Ні
Рівень ізоляції держави
Якщо користувач визначає загальнодоступні методи для своїх Акторів, чи можна їх викликати ззовні?
- Актори Scalaz: н / д. Актор - це запечатана риса.
- Підйомники: Так
- Актори Scala: Так
- Актори Акки: Ні, екземпляр актора захищений позаду ActorRef.
Тип актора
- Актори Scalaz:
Actor[A] extends A => ()
- Ліфт Актори:
LiftActor
,SpecializeLiftActor[T]
- Scala Актори:
Reactor[T]
,Actor extends Reactor[Any]
- Акка Актори:
Actor[Any]
Управління життєвим циклом актора
Актори Scalaz Актори Ліфт Актори Scala Actors Akka Actors
Ручний запуск Ні Ні Так Так
Ручна зупинка Ні Ні Ні Так
Перезапуск при відмові н / д Так Так Конфігурується для кожного екземпляра актора
Перезапустити семантику не застосовується Перезапустити актор Відновити актора до стабільного стану, перерозподіливши його та
поведінки викиньте старий екземпляр
Перезапустіть налаштованість n / an / a X разів, X разів протягом Y часу
Наявні гачки життєвого циклу Жоден цикл дії не діє перед запуском, після зупинки, перед запуском, після перезапуску
Режими надсилання повідомлень
Актори Scalaz Актори Ліфт Актори Scala Actors Akka Actors
Вогонь-забудь! повідомлення актор! msg актор! повідомлення msgRef! повідомлення
повідомлення)
Надіслати-отримати-відповісти (див. 1) актор!? msg актор!? повідомлення msgRef !! повідомлення
актор !! повідомлення
Надіслати-отримати-отримати (див. 2) актор !! повідомлення msgRef !!! повідомлення
Надіслати результат обіцянки (повідомлення). future.onComplete (f => до! f.result)
майбутнє (актор)
Скласти актора з актором comap f Ні Ні Ні
функція (див. 3)
(1) Будь-яка функція f стає таким актором:
val a: Msg => Promise[Rep] = f.promise
val reply: Rep = a(msg).get
(2) Будь-яка функція f стає таким актором:
val a = f.promise
val replyFuture = a(message)
(3) контраваріантних функтор actor comap f
. Також склад Клейслі в Promise
.
Режими відповіді на повідомлення
TBD
Актори Scalaz Актори Ліфт Актори Scala Actors Akka Actors
відповідь відправнику в повідомленні
відповідь на повідомлення
Обробка повідомлень
Підтримує вкладені отримує?
- Актори Scalaz: -
- Підйомники: Так (з невеликим кодуванням рук).
- Актори Scala: Так, як реакція на основі прийому, так і подія.
- Актори Akka: Ні, вкладене отримання може призвести до витоків пам'яті та погіршення продуктивності з часом.
Механізм виконання повідомлень
TBD
Актори Scalaz Актори Ліфт Актори Scala Actors Akka Actors
Назва механізму виконання
Механізм виконання є
конфігурується
Механізм виконання може бути
визначається для кожного актора
Життєвий цикл механізму виконання
має бути явно керованим
Виконання нитки на актора
механізм
Механізм виконання, керований подіями
Тип поштової скриньки
Підтримує тимчасові поштові скриньки
Підтримує постійні поштові скриньки
Розподіл / Віддалені актори
Актори Scalaz Актори Ліфт Актори Scala Actors Akka Actors
Прозорий пульт дистанційного керування немає Ні Так Так
актори
Транспортний протокол не застосовується, віддалений протокол Java Akka
серіалізація (Protobuf поверх TCP)
поверх TCP
Динамічна кластеризація n / an / an / a У комерційній пропозиції
Howtos
TBD
Актори Scalaz Актори Ліфт Актори Scala Actors Akka Actors
Визначте актора
Створіть екземпляр актора
Запустіть екземпляр актора
Зупиніть екземпляр актора