Come viene utilizzato il modello dell'attore?


18

Ho letto un po 'del modello dell'attore, ma non capisco davvero come usare gli attori in una situazione del mondo reale - come modellare un problema con loro.

Qualcuno può spiegare per favore? Un semplice esempio o collegamenti ad esempi sarebbero molto apprezzati.


O intendi il modello dell'attore ?
back2dos

Sospetto che intendi Agenti, non Attori. In tal caso, dai un'occhiata a questa voce di Wikipedia: en.wikipedia.org/wiki/Software_agent
DwB

1
Hanno recitato in Green Lantern e Planet of the Apes per intrattenere i fanatici di /. A sua volta, i geek a /. intrattenere il resto di noi.
Giobbe

Intendo il modello dell'attore e ho aggiornato il mio post per chiarire.
Pnutus,

Risposte:


21

Gli attori, nel senso di azioni di modellazione, con messaggi, ecc. Sono un modo di modellare software che fornisce un paio di elementi utili ...

  1. Gli attori possono vivere su un singolo thread, consentendo operazioni non thread-safe / non simultanee senza un mucchio di magia bloccante. Un attore risponderà ai messaggi nella sua casella di posta. Quando vuoi che elabori un comando, gli invii un messaggio e questo si prenderà cura di loro nell'ordine in cui vengono ricevuti. Proprio come una normale coda. Thread safe è killer qui, e lo uso in numerosi progetti open source su cui lavoro.

  2. In alcune lingue, ad esempio Scala, è facile trasformare il codice basato sull'attore in un singolo processo in un sistema distribuito dividendo gli attori e trasformando i canali su cui comunicano in canali remoti. Questo cambia tra le implementazioni su quanto sia facile, ma è una funzionalità fantastica.

  3. Aiuta a concentrarsi sugli eventi Task Task piuttosto che sugli eventi CRUD. CRUD è semplice ma è come interagire con un casellario. Se siamo in grado di fornire più valore di quello nel software che produciamo, perché lo stiamo facendo? Associare più azioni a un singolo comando "Aggiorna" in un sistema basato su attività è più utile del semplice salvataggio nel DB. Questo entra anche in cose come CQRS.


Grazie per la tua risposta utile e i link. Quale lingua consiglieresti di iniziare a guardare per far sentire meglio gli attori?
Pnutus,

1
Penso che dipenda dalle lingue con cui ti senti a tuo agio. Scala potrebbe avere alcuni dei migliori documenti sugli attori, dal momento che sono un concetto linguistico. Erlang è fantastico per i messaggi in generale, tuttavia, l'intera lingua si basa su quel concetto.
Travis,

Dò un'occhiata a Scala ed Erlang. Ho trovato questa guida per principianti per Erlang, che inizierà da lì. Grazie!
Pnutus,

+1: molto interessante. Sai se esiste una libreria C ++ che implementa attori remoti? Sarei felice di usare Scala ma il mio progetto è in C ++.
Giorgio,

1
Considera questa implementazione del modello di attore C ++: actor-framework.org
Chen OT

4

La risposta di Travis è solida. Quando inizi a parlare di concorrenza, stai cercando di risolvere i problemi di risorse. La concorrenza con thread e blocchi è abbastanza facile da sbagliare. Il modello attore ti aiuta a forzare a programmare parti simultanee del codice come pepite autonome che possono essere eseguite in parallelo e senza dipendere da un altro pezzo di codice. Stai cercando di evitare cattiverie come condizioni di gara e deadlock.

Gli attori sono come te e io in questa conversazione. Non puoi entrare nel mio cervello e scegliere quello che sto scrivendo. Mi hai passato un messaggio che diceva "Perché esistiamo?" Mi sono seduto e ho scricchiolato alcuni numeri e ho inviato una risposta "Penso, quindi sono." Non potevi dire cosa stavo facendo sulla mia fetta di pianeta Terra, l'unico contatto che hai con me è attraverso i messaggi che passiamo avanti e indietro.

MODIFICARE:

Non hai detto in quali lingue ti trovi a tuo agio, ma vedi se c'è un'implementazione dell'attore nella tua lingua. Forse il più semplice sarebbe alcune delle librerie di attori in Python. Ma probabilmente meglio per l'apprendimento sarebbe Erlang. La lingua è un po 'ruvida ma una volta superate le sfumature, è una buona lingua.


Non sono sicuro che la modifica di Gnat sia diretta verso di me, ma la mia arma preferita tende generalmente ad essere Haskell. Erlang è sicuramente una buona lingua. Haskell ha sempre fatto affidamento sui CSP per la concorrenza, ma ci sono alcune implementazioni di attori là fuori.
M15K,

-2

Gli attori sono un elemento dei diagrammi dei casi d'uso che rappresentano qualsiasi entità esterna (utente, sistema esterno, ecc.) Che può agire su un sistema. Qualsiasi caso d'uso di base conterrà attori - basta "google use" di Google per molti esempi.


6
Non sono quelli chiamati figure stilizzate ?
pillmuncher

1
Non ero chiaro e tu hai frainteso. Stavo parlando del modello dell'attore.
Pnutus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.