Entrambi stope PoisonPilltermineranno l'attore e interromperanno la coda dei messaggi. Faranno sì che l'attore interrompa l'elaborazione dei messaggi, invierà una chiamata di arresto a tutti i suoi figli, attenderà che terminino, quindi chiamerà il suo postStophook. Tutti gli altri messaggi vengono inviati alla casella delle lettere morte.
La differenza è in quali messaggi vengono elaborati prima dell'inizio di questa sequenza. Nel caso della stopchiamata, il messaggio attualmente in fase di elaborazione viene completato per primo e tutti gli altri vengono scartati. Quando si invia un PoisonPill, questo è semplicemente un altro messaggio in coda, quindi la sequenza inizierà quando PoisonPillverrà ricevuto. Tutti i messaggi che sono in coda nella coda verranno elaborati per primi.
Al contrario, il Killmessaggio fa sì che l'attore lanci un fileActorKilledException che viene gestito utilizzando il normale meccanismo del supervisore. Quindi il comportamento qui dipende da ciò che hai definito nella tua strategia di supervisore. L'impostazione predefinita è fermare l'attore. Ma la casella di posta persiste, quindi quando l'attore si riavvia avrà ancora i vecchi messaggi tranne quello che ha causato l'errore.
Vedi anche la sezione "Fermare un attore", "Uccidere un attore" nei documenti:
http://doc.akka.io/docs/akka/snapshot/scala/actors.html
E altro sulle strategie di supervisione:
http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html