Sto giocando con un modello mentale per il sistema di attori distribuiti che comunica usando i messaggi. In questo, è possibile per un attore creare un altro attore. Ho incontrato una situazione specifica in cui non sono davvero sicuro su come risolvere. Considera questa sequenza di eventi:
- L'attore 1 richiede la creazione dell'attore 2. Come parte della "costruzione", passa il proprio ID.
- L'attore 1 richiede la propria cancellazione.
- Il sistema invia un messaggio KILL a tutti gli attori che si sono abbonati a {Actor1 | KILL}
- Viene creato l'attore 2, salva l'ID di "1" inviato come parametro di costruzione.
- L'attore 2 tenta di inviare un messaggio all'attore 1.
- ???
- L'attore 2 rileva che l'attore 1 è scomparso e reagisce.
Poiché gli attori 1 e 2 possono essere su macchine fisicamente diverse, eseguendo una query "Esiste l'attore X?" ogni volta che (o prima di ogni volta) si tenta di inviare un messaggio si introdurrà una latenza che non dovrebbe essere presente nel caso tipico. Allo stesso modo, bloccare fino a quando non si sa "Invia successo" o "Invia fallito" sembra una cattiva idea. Sembra anche che il codice di scrittura con if(send() == fail) { ... }
sia brutto e soggetto a errori. Esistono soluzioni note per gestire in modo efficace e pulito questo tipo di situazioni?