Einer der Vorteile von Nachrichtenverarbeitungsmodellen wie Akteuren und Agenten besteht darin, dass die traditionellen Parallelitätsprobleme (hauptsächlich die Synchronisierung des gemeinsam genutzten Status) kein Problem mehr darstellen. Der Schauspieler kann den privaten Status beibehalten und ihn ohne Sperren frei aktualisieren. Das Akteur-Framework stellt sicher, dass jeweils nur eine Nachricht verarbeitet wird. Bei der serialisierten Verarbeitung kann Code sperrenfrei geschrieben werden.
In Ihrem Beispiel für Benutzer, die ein Formular speichern, kann der Akteur die Liste ohne Sperren aktualisieren, vorausgesetzt, der Akteur hat eine Liste einiger Daten aus jedem Formular geführt, da das Framework garantiert, dass jeweils nur ein Formular verarbeitet wird. Traditionell müssten Sie die Listenzugriffe sperren oder eine gleichzeitige Liste verwenden.
Die Parallelitätsstrategie ist eine etwas andere Angelegenheit und liegt immer noch in Ihrer Verantwortung (wobei keine Strategie die häufigste Strategie ist). Um Ihr Beispiel geringfügig zu ändern, nehmen wir an, dass beide Benutzer gleichzeitig versuchen, die gleiche Formularinstanz zu aktualisieren. Ohne Parallelitätsstrategie überschreiben die Änderungen des einen den anderen (wahrscheinlich gewinnt der letzte). Das ist in Ordnung, aber bestenfalls führt dies zu unerwartetem Verhalten für den Benutzer, dessen Änderungen überschrieben wurden. Wenn sie das gerade geänderte Formular anzeigen, hat es unerwartete Werte (vom anderen Benutzer). Im schlimmsten Fall (wenn es sich nicht nur um Formularaktualisierungen handelt, sondern auch um Versandaufträge) kann dies zu Verlusten verschiedener Art (Zeit, Umsatz usw.) führen.
Die Verwendung einer Parallelitätsstrategie hilft, diese Fälle zu identifizieren und sie basierend auf Geschäftsregeln zu lösen. Bei Optimistic Concurrency sendet der Benutzer beispielsweise die Version des Formulars, das aktualisiert wird. Wenn der Akteur die Änderung verarbeitet, stellt er fest, dass der zweite Benutzer glaubt, Version 5 zu aktualisieren, wenn sich das Formular aufgrund der Aktualisierung des ersten Benutzers tatsächlich in Version 6 befindet. Jetzt können wir zumindest den 2. Benutzer darüber informieren, dass sich das Formular bereits geändert hat, seit er mit der Bearbeitung begonnen hat. Oder welche Regeln das Unternehmen dort durchsetzen will.
Wenn Sie ein Formular aktualisieren, ist Ihnen die Parallelität wahrscheinlich weniger wichtig (hängt davon ab, denke ich). In anderen Fällen kann es jedoch sehr wichtig sein, Verstöße zumindest zu überprüfen und zu behandeln. Möglicherweise möchten Sie die Verletzung der Parallelität sogar ignorieren, z. B. wenn die Benutzer verschiedene Abschnitte geändert haben (um die Formularanalogie fortzusetzen). Oder wenn die Änderung große Auswirkungen auf das Unternehmen hat (ein Großauftrag), möchten Sie sie akzeptieren und kleinere Konflikte später lösen (z. B. wurde die jährliche Aktualisierung der Kontaktinformationen noch nicht abgeschlossen).
Ich glaube, Akka hat eine Reihe anderer Dimensionen, wie z. B. den Umgang mit Fehlern, Supervisoren usw., die für Entwickler wichtige Überlegungen sind.