Domanda

Ho scoperto che esiste anche un modello attore Akka, quindi mi chiedo qual è la differenza tra l'attore di Akka e il modello dell'attore di Scala?

È stato utile?

Soluzione

Bene, non c'è. C'è solo un modello di attore e gli attori di Akka e gli attori Scala sono due implementazioni di quel modello.

Tutto il modello di attore afferma che i tuoi primitivi di concorrenza sono attori, il che può:

  • Ricevi un messaggio e decidi cosa fare in seguito a seconda del contenuto del messaggio, incluso:

  • Invia messaggi a tutti gli attori che conoscono

  • Crea nuovi attori

e fornisce alcune garanzie, ad esempio:

  • Qualsiasi attore gestirà solo un singolo messaggio alla volta

  • I messaggi inviati dall'attore X all'attore y arriveranno nell'ordine che sono stati inviati

Non c'è differenza tra gli attori di Scala e Akka a questo livello.

Per differenze in ciò che possono fare, vedi Panoramica delle implementazioni di attore diverse. Il più grande, per me, è che Akka supporta i supervisori e gli attore.

Altri suggerimenti

C'è anche una risposta storica. I creatori di Scala hanno pensato che dovrebbe esserci un framework attore. Jonas Bonér l'ha provato, ma non era completamente soddisfatto, quindi ha iniziato a lavorare su un nuovo - che si è evoluto in Akka. Tuttavia, il popolo Scala ha pensato che fosse migliore del proprio - quindi a Jfokus 2011 hanno annunciato che Akka sarebbe diventato il quadro attore standard di Scala. Tuttavia, quella migrazione richiederà del tempo.

Questo dipende un po 'da cosa intendi con "modello": puoi fare riferimento al "modello di esecuzione" o al "modello di programmazione" (e forse anche ad altri modelli).

Per i modelli di esecuzione, ci sono fondamentalmente due: basati su thread o basati su eventi. La libreria attore standard Scala contiene entrambi. Il thread basato su un thread per ciascun attore, mentre il basato su eventi utilizza un thread-pool. Il primo è più intuitivo da capire, il secondo è più efficiente. Akka è basato sul modello basato su eventi.

Per il modello di programmazione, c'è una grande differenza tra la libreria standard Scala e Akka. Nella libreria standard Scala, implementate sostanzialmente il metodo "Esegui" - e se vuoi aspettare un messaggio in arrivo, ti metti in uno stato di attesa (chiamando "ricevere" o "reagire"). Quindi, il modello di programmazione segue la "metafora del thread". Tuttavia, in Akka, la metafora di programmazione è che si implementano alcuni metodi del ciclo di vita, ma il methode "run" è scritto all'interno del framework. In realtà si scopre che questo modello di programmazione funziona molto meglio anche con il modello di esecuzione basato su eventi.

Se sei interessato ai diversi modelli di esecuzione e ai modelli di programmazione degli attori standard Scala che ho scritto un pochi pali sulla questione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top