Akka Futures implementa un modo di comunicazione asincrono, mentre Java7 Futures implementa un approccio sincrono. Sì, fanno la stessa cosa - comunicazione - ma in modo completamente diverso.
La coppia produttore-consumatore può interagire in due modi: sincrono e asincrono. La modalità sincrona presuppone che il consumatore abbia il proprio thread ed esegua un'operazione di blocco per ottenere il messaggio successivo, ad es. BlockingQueue.take()
. Nell'approccio asincrono, il consumatore non possiede un thread, è solo un oggetto con almeno due metodi: per memorizzare un messaggio e per elaborarlo. Producer chiama il metodo store, proprio come chiama lo Queue.put(m)
nell'approccio sincrono, ma questo metodo avvia anche l'esecuzione del metodo di elaborazione del consumatore su un comune pool di thread.
UPDT Per quanto riguarda la seconda domanda (perché mai utilizzare un futuro Akka): La creazione futura sembra (ed è) più semplice di quella di Actor; il codice per una catena di Futures è più compatto e più dimostrabile di quello degli attori. Nota tuttavia, un Futuro può passare solo un singolo valore (messaggio) mentre un attore può gestire una sequenza di messaggi. Ma le sequenze possono essere gestite con Akka Streams. Quindi sorge la domanda: perché mai usare gli attori Akka? Invito sviluppatori più esperti a rispondere a questa domanda. In generale, penso che se il tuo compito può essere risolto con Futures, allora usi Futures, altrimenti se con Stream, usi Stream, altrimenti se con Akka Actors, quindi usi Actors, altrimenti cerchi un altro framework.
fonte
2015-06-10 06:06:26
"Future" e "Promise" di Akka sono più paragonabili a "CompletableFuture" di Java. –
Grazie a @SotiriosDelimanolis, ma potresti non pensare che sia come è, ma è così. – smeeb