Suppongo che i messaggi verranno ricevuti ed elaborati in modo infallibile. Tuttavia, ho letto (alcuni) documenti akka/scala ma non ho ancora trovato la parola chiave "threadsafe".Attori (scala/akka): è implicito che il metodo di ricezione sarà accessibile in modo infallibile?
risposta
È probabilmente perché il modello di attore presuppone che ogni istanza di attore elabora in sequenza la propria casella di posta. Ciò significa che non dovrebbe mai accadere, che due o più thread concorrenti eseguono il codice dell'istanza di un singolo attore. Tecnicamente è possibile creare un metodo nella classe di un attore (perché è ancora un oggetto) e chiamarlo contemporaneamente da più thread, ma ciò rappresenterebbe un importante allontanamento dalle regole di utilizzo dell'attore e lo si farebbe "a proprio rischio", perché quindi si perderebbero tutte le garanzie di sicurezza del thread di quel modello.
Questo è anche uno dei motivi per cui Akka ha introdotto un concetto di ActorRef: un handle che consente di comunicare con l'attore tramite il passaggio di messaggi, ma non chiamando direttamente i relativi metodi.
Penso che abbiamo abbastanza ben documentato: http://doc.akka.io/docs/akka/2.3.9/general/jmm.html
Ho letto quel documento più volte. Sono un principiante JVM; nella mia comprensione, un "succede prima" conferma solo la "visibilità". Possiamo ancora avere problemi a causa di più thread nella sezione critica. –
Akka salvaguarda contro l'esecuzione di messaggi per lo stesso attore allo stesso tempo, consentendo sempre la pianificazione dell'esecuzione della cassetta postale una sola volta. (o è programmato per l'esecuzione o non lo è). Rendendo la Mailbox Runnable non solo evitiamo di allocare nuovi runnable, ma possiamo anche, tramite una semplice operazione CAS, assicurare che una mailbox sia programmata per l'esecuzione una sola volta, il che significa che non è necessaria alcuna contabilità aggiuntiva per assicurarsi che 2 i thread non elaborano la stessa cassetta postale allo stesso tempo. –
Fantastica spiegazione. Questo sicuramente mi aiuterà in ulteriore lettura. Una domanda però, come avrei potuto dedurre l '"elaborazione reciprocamente esclusiva" della casella di posta da http://akka.io/docs/akka/1.2/general/jmm.html? –
Gli attori sono 'Treadsafe'. The Actor System (AKKA) offre a ciascun attore il proprio "filo leggero". Significa che questo non è un battistrada, ma il sistema AKKA darà l'impressione che un attore sia sempre in esecuzione nello stesso thread allo sviluppatore. Ciò significa che tutte le operazioni eseguite a seguito di un'azione su un messaggio sono, a tutti gli effetti, thread-safe.
Tuttavia, non si deve minare AKKA utilizzando messaggi mutabili o stato pubblico. Se sviluppi i tuoi attori come unità indipendenti di funzionalità, allora saranno sicuri.
Consulta anche: http://doc.akka.io/docs/akka/2.3.12/general/actors.html#State
e http://doc.akka.io/docs/akka/2.3.12/general/jmm.html per uno studio più approfondito del modello di memoria AKKA e come gestisce le questioni 'battistrada'.
- 1. Il parametro è meno accessibile del metodo
- 2. Che cosa è un modo infallibile per impostare in modo permanente la directory di lavoro R?
- 3. metodo getoutputmediafileuri non è accessibile?
- 4. È possibile che parentesi in C causino il cast implicito?
- 5. Perché il metodo protetto non è accessibile dalla sottoclasse?
- 6. Perché il cast implicito implicito in float piuttosto che double quando si richiama il costruttore?
- 7. Utilizzare attori in gioco
- 8. In che modo "diventa" implementato nelle lingue che supportano il modello degli attori?
- 9. implicito casting - che cast è utilizzato
- 10. impilamento di tratti multipli negli attori Akka
- 11. metodo implicito di conversione gruppo Gotcha
- 12. Variabili costruite in modo implicito in C++
- 13. Impossibile convertire in modo implicito il tipo 'System.IO.Stream' in 'Java.IO.InputStream'
- 14. In che modo ASP.NET MVC sa che un metodo è un metodo di azione?
- 15. Errore CS0051 (accessibilità incoerente: il tipo di parametro "Lavoro" è meno accessibile del metodo "AddJobs.TotalPay (Job)")
- 16. Impossibile convertire in modo implicito il tipo 'stringa' in 'System.Web.UI.WebControls.Unit'
- 17. Non è possibile convertire in modo implicito il tipo "X" in "stringa" - quando e in che modo decide che "non può"?
- 18. Come condivido il comportamento tra gli attori di Akka?
- 19. Importare in modo implicito il modulo Swift specifico
- 20. In che modo il metodo attende il rilascio del blocco?
- 21. Converti in modo implicito il gruppo di metodi in Delegato (per argomento di Control.Invoke)
- 22. Quanto è sicuro il sussidio implicito di Oauth 2.0?
- 23. In che modo gli attori di Erlang differiscono dagli oggetti OOP?
- 24. L'indicizzatore di un oggetto è in qualche modo accessibile tramite il suo TypeDescriptor?
- 25. Fare div div "non selezionabile" in modo che il contenuto sottostante sia accessibile?
- 26. Come aspettare che il sistema di attori Akka termini?
- 27. Contrassegno di un argomento implicito all'interno di un metodo
- 28. metodo implicito scala con più argomenti
- 29. Fai in modo che il C++ chiami il metodo giusto per il modello in modo sgradevole
- 30. Maven plug infallibile pende sempre
Grazie Przemek. Questo spiega. –