Одним из преимуществ моделей обработки сообщений, таких как акторы и агенты, является то, что традиционные проблемы параллелизма (в основном синхронизация общего состояния) больше не являются проблемой. Актер может сохранять приватное состояние и свободно обновлять его без блокировок. Структура субъекта гарантирует, что одновременно обрабатывается только одно сообщение. При последовательной обработке код может быть написан без блокировок.
В вашем примере, когда пользователи сохраняют форму, предполагая, что субъект хранит список некоторых данных из каждой формы, он может обновлять список без блокировок, поскольку среда гарантирует, что за один раз будет обрабатываться только одна форма. Традиционно вам придется блокировать доступ к списку или использовать параллельный список.
Стратегия параллелизма - это немного другой вопрос, и вы по-прежнему несете за него ответственность (при этом ни одна из стратегий не является самой распространенной стратегией). Чтобы немного изменить ваш пример, допустим, что оба пользователя пытаются обновить один и тот же экземпляр формы одновременно. Без стратегии параллелизма, изменения одного заменит другой (вероятно, последний выигрывает). Это нормально, но в лучшем случае это приводит к неожиданному поведению пользователя, чьи изменения были перезаписаны. Если они просматривают только что измененную форму, она будет иметь неожиданные значения (от другого пользователя). В худшем случае (когда мы говорим не только об обновлениях форм, но и о таких вещах, как отправка заказов), это может привести к различным потерям (время, доход и т. Д.).
Использование стратегии параллелизма помогает идентифицировать эти случаи и иметь возможность разрешать их на основе бизнес-правил. Например, в Optimistic Concurrency пользователь отправляет версию формы, которую он обновляет. Когда субъект отправляется на обработку изменения, он замечает, что второй пользователь думает, что он обновляет версию 5, когда форма фактически находится на версии 6 из-за обновления первого пользователя. Теперь, по крайней мере, мы можем уведомить второго пользователя, что форма уже изменилась с тех пор, как он начал ее редактировать. Или какие-либо правила, которые бизнес хочет применить там.
В случае обновления формы вы, вероятно, не слишком заботитесь о параллелизме (я полагаю, это зависит). Но в других случаях очень важно, по крайней мере, иметь возможность проверять и обрабатывать нарушения. Возможно, вы даже захотите игнорировать нарушение параллелизма, например, если пользователи изменили разные разделы (чтобы продолжить аналогию с формой). Или, если изменение оказывает большое влияние на бизнес (большой заказ), вы хотите принять его и разрешить незначительные конфликты позже (например, ежегодное обновление контактной информации не было завершено).
Я считаю, что у Akka есть ряд других аспектов, таких как то, как она обрабатывает сбои, контролеров и т. Д., Которые являются важными факторами для devops.