типизированные акторы и фьючерсы — чем они отличаются?

Я читаю о типизированных актерах и интерфейсе типизированный актор выглядит следующим образом:

trait Squarer {
  def squareDontCare(i: Int): Unit //fire-forget

  def square(i: Int): Future[Int] //non-blocking send-request-reply

  def squareNowPlease(i: Int): Option[Int] //blocking send-request-reply

  def squareNow(i: Int): Int //blocking send-request-reply

  @throws(classOf[Exception]) //declare it or you will get an UndeclaredThrowableException
  def squareTry(i: Int): Int //blocking send-request-reply with possible exception
}

Чем это отличается от простого Future?

Они действительно кажутся похожими, интерфейс у def square(i: Int): Future[Int] одинаков.

Так ли это, что типизированные акторы прозрачны для местоположения (и могут запускаться на других узлах), а фьючерсы — нет?

Значит, типизированных акторов можно рассматривать как своего рода более ограниченную форму фьючерсов? В том смысле, что конструкция Future ограничена таким образом, что для построения Future нельзя использовать ничего, что не может пройти через провод (не сериализуемое). Например, замыкания (или любые другие функции) не могут быть переданы типизированным акторам, но могут использоваться для создания фьючерсов.


person jhegedus    schedule 30.04.2017    source источник
comment
Типизированные актеры: этот модуль будет устаревшим, поскольку он будет заменен проектом Akka Typed, который в настоящее время разрабатывается в режиме открытого предварительного просмотра. Типизированные субъекты хороши для создания моста между акторными системами («внутри») и неакторным кодом («внешним»), потому что они позволяют писать снаружи обычный объектно-ориентированный код.   -  person fracca    schedule 30.04.2017


Ответы (1)


Я вижу следующий вариант использования: предположим, что ваш сервис за актером имеет изменяемое состояние. Поскольку вызов метода является сообщением, а сообщения обрабатываются последовательно, вы получаете синхронизацию внутреннего состояния службы.

Актеры BTW по умолчанию не ограничивают возможность сериализации сообщений.

person simpadjo    schedule 30.04.2017
comment
Хорошая точка зрения ! Спасибо. Это действительно довольно большие различия. Фьючерсы исполняются один раз, так сказать, эфемерны, а акторы живут дольше. - person jhegedus; 01.05.2017