Ответ 1
Этот ответ на самом деле не мой. Он был выпущен Виктором Клангом (известность Акка) с помощью Дэвида Поллака (славы Поднимания), Джейсона Заугага (славы Scalaза) Филипп Халлер (из Scala Актеры славы).
Все, что я делаю здесь, это его форматирование (что было бы проще, если бы поддерживаемые Qaru таблицы).
Есть несколько мест, которые я буду заполнять позже, когда у меня будет больше времени.
Философия дизайна
-
Актеры Scalaz
Минимальная сложность. Максимальная общность, модульность и расширяемость.
-
Актеры-актеры
Минимальная сложность, сбор мусора JVM, а не беспокойство о явном жизненном цикле, поведение обработки ошибок, совместимое с другими программами Scala и Java, легкий/небольшой объем памяти, почтовый ящик, статически похожий на Scala актеров и актеров Erlang, высокая производительность.
-
Scala Актеры
Обеспечьте полную модель актера Erlang в Scala, легкий/небольшой объем памяти.
-
Актеры Акка
Простая и прозрачно распределяемая, высокопроизводительная, легкая и легко адаптируемая.
Versioning
Scalaz Actors Lift Actors Scala Actors Akka Actors Current stable ver. 5 2.1 2.9.0 0.10 Minimum Scala ver. 2.8 2.7.7 2.8 Minimum Java ver. 1.5 1.5 1.6
Поддержка модели актера
Scalaz Actors Lift Actors Scala Actors Akka Actors Spawn new actors Yes Yes Yes Yes inside of actor Send messages to Yes Yes Yes Yes known actor Change behavior Actors are Yes Yes: nested Yes: for next message immutable react/receive become/unbecome Supervision Not provided No Actor: Yes, Yes (link/trapExit) Reactor: No
Уровень изоляции состояний
Если пользователь определяет общедоступные методы их Актеры, они могут быть снаружи?
- Scalaz Актеры: n/a. Актер - запечатанная черта.
- Актеры: Да
- Scala Актеры: Да
- Акка Актеры: Нет, актерский экземпляр экранирован за актером.
Тип актера
- Scalaz Актеры:
Actor[A] extends A => ()
- Актеры:
LiftActor
,SpecializeLiftActor[T]
- Scala Актеры:
Reactor[T]
,Actor extends Reactor[Any]
- Акка Актеры:
Actor[Any]
Управление жизненным циклом актера
Scalaz Actors Lift Actors Scala Actors Akka Actors Manual start No No Yes Yes Manual stop No No No Yes Restart-on-failure n/a Yes Yes Configurable per actor instance Restart semantics n/a Rerun actor Restore actor to stable state by re-allocating it and behavior throw away the old instance Restart configurability n/a n/a X times, X times within Y time Lifecycle hooks provided No lifecycle act preStart, postStop, preRestart, postRestart
Режим отправки сообщений
Scalaz Actors Lift Actors Scala Actors Akka Actors Fire-forget a ! message actor ! msg actor ! msg actorRef ! msg a(message) Send-receive-reply (see 1) actor !? msg actor !? msg actorRef !! msg actor !! msg Send-receive-future (see 2) actor !! msg actorRef !!! msg Send-result-of- promise(message). future.onComplete( f => to ! f.result ) future to(actor) Compose actor with actor comap f No No No function (see 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 Actors Lift Actors Scala Actors Akka Actors reply-to-sender-in-message reply-to-message
Обработка сообщений
Поддерживает вложенные запросы?
- Scalaz Актеры: -
- Актеры-актеры: Да (с небольшим кодированием).
- Scala Актеры: Да, как на основе потоков, так и на основе событий.
- Акка Актеры: Нет, вложенность может привести к утечкам памяти и ухудшению производительности с течением времени.
Механизм выполнения сообщений
TBD
Scalaz Actors Lift Actors Scala Actors Akka Actors Name for Execution Mechanism Execution Mechanism is configurable Execution Mechanism can be specified on a per-actor basis Lifecycle of Execution Mechanism must be explicitly managed Thread-per-actor execution mechanism Event-driven execution mechanism Mailbox type Supports transient mailboxes Supports persistent mailboxes
Дистрибьюторы/Дистанционные Актеры
Scalaz Actors Lift Actors Scala Actors Akka Actors Transparent remote n/a No Yes Yes actors Transport protocol n/a n/a Java Akka Remote Protocol serialization (Protobuf on top of TCP) on top of TCP Dynamic clustering n/a n/a n/a In commercial offering
HowTos
TBD
Scalaz Actors Lift Actors Scala Actors Akka Actors Define an actor Create an actor instance Start an actor instance Stop an actor instance