2013-09-05 14 views
5

Se dovessi chiamareinvio di messaggi da non-attori in Akka

actorRef.tell("MSG", null); 

Da un non-attore

è ancora thread-safe? E asincrono come in completo immediatamente?

Il messaggio è immutabile.

Fondamentalmente il mio codice è:

class NonActor { 
    .... 

    public void tellTest() { 

     actorRef.tell("MSG", null); 
    } 
} 
+0

Qual è il tuo codice? – gparyani

risposta

5

Fondamentalmente actorRef.tell("MSG", null); crea un disco come

(actorRef, Envelope(msg, sender)) 

e metterlo in coda dei messaggi ActorSystem s'. Pertanto, tell non è collegato in alcun modo all'attore. Il metodo tell è senza dubbio thread-safe.

+0

Quelli erano i miei pensieri sul suo funzionamento pure, e in effetti lo è. Trovato nei documenti e confermato pochi giorni fa. – BAR

1

Che si tratti di thread-safe dipende il resto della tua app. Gli attori non sono intrinsecamente thread-safe; puoi condividere lo stato mutabile come puoi con qualsiasi entità applicativa. Ma la chiamata tell verrà restituita immediatamente perché è asincrona.

+0

Vuoi dire dipende dal messaggio stesso? Finché è immutabile? – BAR

+0

Fintanto che il msg è immutabile e l'attore non utilizza nessuno stato mutabile condiviso. –

0

Il null come mittente indica che l'attore destinatario non può eseguire mittente(). Tell() per rispondere al messaggio.

Problemi correlati