アクターやエージェントなどのメッセージ処理モデルの利点の1つは、従来の同時実行性の問題(主に共有状態の同期)が問題ではなくなったことです。アクターはプライベートな状態を維持し、ロックなしで自由に更新できます。アクターフレームワークは、一度に1つのメッセージのみが処理されるようにします。シリアル化された処理を使用すると、ロックフリーの方法でコードを記述できます。
ユーザーがフォームを保存する例では、アクターが各フォームの一部のデータのリストを保持していると想定すると、フレームワークは一度に1つのフォームのみが処理されることを保証するため、アクターはロックなしでリストを更新できます。従来、リストアクセスをロックするか、同時リストを使用する必要がありました。
並行性戦略は少し異なりますが、それでも責任があります(最も一般的な戦略は戦略ではありません)。例を少し変更するために、両方のユーザーが同じフォームインスタンスを同時に更新しようとしているとしましょう。並行性戦略がないと、1つの変更が他の変更を上書きします(おそらく最後の1つが優先されます)。それは問題ありませんが、せいぜいこれにより、変更が上書きされたユーザーに予期しない動作が発生します。変更したばかりのフォームを表示すると、(他のユーザーからの)予期しない値になります。最悪の場合(フォームの更新だけでなく、注文の発送などについても)、さまざまな種類(時間、収益など)の損失が発生する可能性があります。
同時方式を使用すると、これらのケースを識別し、ビジネスルールに基づいてそれらを解決できるようになります。たとえば、Optimistic Concurrencyは、更新中のフォームのバージョンをユーザーに送信させます。アクターが変更を処理しようとすると、最初のユーザーの更新により、フォームが実際にバージョン6であるときに、2番目のユーザーがバージョン5を更新していると考えていることに気付きます。これで、少なくとも2人目のユーザーに、フォームの編集を開始してから既にフォームが変更されていることを通知できます。あるいは、企業がそこで施行したい規則は何でも。
フォームを更新する場合、おそらく同時実行性についてそれほど気にする必要はありません(おそらく、私は推測します)。しかし、他の場合では、少なくとも違反をチェックして処理できることが非常に重要な場合があります。ユーザーが別のセクションを変更した場合(フォームの類推を続けるため)のように、同時実行違反を無視することもできます。または、変更がビジネスに大きな影響を与える場合(大きな注文)、それを受け入れて、後で小さな競合を解決する必要があります(例:連絡先情報の年次更新が完了していない)。
Akkaには、障害の処理方法や監督者など、開発者にとって重要な考慮事項である他の多くの側面があると思います。