2016-12-15 8 views
2

Я читал, что акк-акер обрабатывает сообщения один за другим. Почему это?Почему поведение Akka Actor по умолчанию обрабатывает сообщения один за другим?

Что мне не удалось обернуть вокруг: «Почему синхронизированное выполнение сообщений по умолчанию?». Я понимаю, что для параллельного выполнения сообщений почтовых ящиков функции (выполняемые задания) должны иметь 0 побочных эффектов.

Это поведение по умолчанию akka по умолчанию, потому что те случаи использования, которые имеют абсолютно независимое выполнение и 0 побочных эффектов, являются МЕНЬШИНСТВОМ, и мы обычно работаем с заданиями, требующими общего ресурса.

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

+0

Я думаю, один момент состоит в том, что вы хотите распараллеливать разные актеры, но не внутри одного конкретного актера. – marstran

ответ

1

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

Это работает, потому что:

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

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

1

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