tutorial meaning lightbend anime scala akka

scala - meaning - ¿Akka Kill vs. Stop vs. Poison Pill?



akka wikipedia (3)

Pregunta para principiantes sobre Akka: estoy leyendo sobre Akka Essentials, ¿podría alguien explicar la diferencia entre Akka Stop / Poison Pill vs. Kill? El libro ofrece solo una pequeña explicación: "Matar es síncrono contra Píldora venenosa es asíncrono". ¿Pero de qué manera? ¿Se bloquea el hilo del actor llamante durante este tiempo? ¿Se notifica a los niños actores durante la matanza, la detención posterior a la parada, etc.? ¿Ejemplos de uso de un concepto frente al otro?

¡Muchas gracias!


PoisonPill detiene al actor de forma asincrónica una vez que se hace con todos los mensajes que se recibieron en el buzón, antes de PoisonPill.


Tanto stop como PoisonPill terminarán el actor y detendrán la cola de mensajes. Harán que el actor deje de procesar los mensajes, enviará una llamada de parada a todos sus hijos, esperará a que terminen y luego llamará a su postStop . Todos los demás mensajes se envían al buzón de mensajes no entregados.

La diferencia está en que los mensajes se procesan antes de que comience esta secuencia. En el caso de la llamada de stop , el mensaje que se está procesando actualmente se completa primero, y todos los demás se descartan. Al enviar un PoisonPill , este es simplemente otro mensaje en la cola, por lo que la secuencia comenzará cuando se PoisonPill el PoisonPill . Todos los mensajes que están delante de él en la cola se procesarán primero.

Por el contrario, el mensaje de Kill provoca que el actor lance una ActorKilledException que se maneja usando el mecanismo de supervisor normal. Entonces, el comportamiento aquí depende de lo que haya definido en su estrategia de supervisor. El valor predeterminado es detener el actor. Pero el buzón persiste, por lo que cuando el actor se reinicia, seguirá teniendo los mensajes antiguos, excepto el que causó el error.

También vea la sección ''Detener a un actor'', ''Matar a un actor'' en los documentos:

http://doc.akka.io/docs/akka/snapshot/scala/actors.html

Y más sobre estrategias de supervisión:

http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html


Usa PoisonPill siempre que puedas. Se coloca en el buzón y se consume como cualquier otro mensaje. También puedes usar "context.stop (self)" desde dentro de un actor.