Uno dei vantaggi dei modelli di elaborazione dei messaggi come attori e agenti è che i tradizionali problemi di concorrenza (principalmente la sincronizzazione dello stato condiviso) non rappresentano più un problema. L'attore può mantenere lo stato privato e aggiornarlo liberamente senza blocchi. Il framework degli attori assicura che venga elaborato un solo messaggio alla volta. Con l'elaborazione serializzata, il codice può essere scritto in un modo senza blocco.
Nel tuo esempio di utenti che salvano un modulo, supponendo che l'attore conservasse un Elenco di alcuni dati da ciascun modulo, l'attore può aggiornare l'elenco senza blocchi, poiché il framework garantisce che verrà elaborato un solo modulo alla volta. Tradizionalmente, dovresti bloccare gli accessi all'elenco o utilizzare un elenco simultaneo.
La strategia di concorrenza è una questione leggermente diversa ed è ancora una tua responsabilità (nessuna strategia è la strategia più comune). Per cambiare leggermente il tuo esempio, supponiamo che entrambi gli utenti provino ad aggiornare contemporaneamente l'istanza del modulo SAME. Senza strategia di concorrenza, i cambiamenti di uno sovrascriveranno l'altro (probabilmente l'ultimo vince). Va bene, ma nella migliore delle ipotesi ciò comporta un comportamento imprevisto per l'utente le cui modifiche sono state sovrascritte. Se visualizzano il modulo che hanno appena modificato, avrà valori imprevisti (dall'altro utente). Nel peggiore dei casi (quando non stiamo parlando solo di aggiornamenti dei moduli, ma di cose come gli ordini di spedizione), potrebbero verificarsi perdite di vario tipo (tempo, entrate, ecc.).
L'uso di una strategia di concorrenza consente di identificare questi casi e di risolverli in base alle regole aziendali. Ad esempio, la concorrenza ottimistica consente all'utente di inviare la versione del modulo che sta aggiornando. Quando l'attore esegue l'elaborazione della modifica, nota che il secondo utente pensa che stia aggiornando la versione 5 quando il modulo è effettivamente alla versione 6 a causa dell'aggiornamento del primo utente. Ora almeno possiamo avvisare il secondo utente che il modulo è già cambiato da quando hanno iniziato a modificarlo. O qualunque siano le regole che l'azienda vuole far rispettare lì.
Nel caso dell'aggiornamento di un modulo, probabilmente non ti interessa molto della concorrenza (dipende, immagino). Ma in altri casi, può essere una cosa molto importante almeno essere in grado di controllare e gestire le violazioni. Potresti anche voler ignorare la violazione della concorrenza, come se gli utenti cambiassero diverse sezioni (per continuare l'analogia del modulo). O se la modifica ha un grande impatto sull'azienda (un grosso ordine), si desidera accettarla e risolvere conflitti minori in seguito (ad es. L'aggiornamento annuale delle informazioni di contatto non è stato completato).
Credo che Akka abbia una serie di altre dimensioni come il modo in cui gestisce i guasti, i supervisori, ecc. Che sono considerazioni importanti per gli sviluppatori.