Es una mala práctica de enviar un actor un mensaje de algo que no es un actor?

StackOverflow https://stackoverflow.com/questions/1058408

  •  21-08-2019
  •  | 
  •  

Pregunta

Supongamos que tengo alguna clase que tiene una propiedad de tipo actor_ Actor. ¿Hay un problema conmigo haciendo

def someMethod() = {
  actor_ ! "HELLO"
}

O debería enviar un mensaje siempre debe realizarse desde el otro actor; por ejemplo.

def someMethod() = {
  Actor.actor { actor_ ! "HELLO" }
}
¿Fue útil?

Solución

Depende. Cuando se envía un mensaje a un actor de código no actor, ActorProxy se crea y almacena en una secuencia de procesamiento local automáticamente. Esto crea un potencial de pérdida de memoria, aunque muy pequeña, debido a que el ActorProxy no será GC'd hasta que se GC'd el hilo. El ActorProxy permite esencialmente la rosca no actor que en muchos aspectos se comportan como un actor, incluyendo el mensaje de recepción.

El problema más grande es que si el hilo está gestionando, similar a la forma en la biblioteca el actor maneja los hilos, por lo que lo que representa un contexto lógico puede al mismo tiempo estar en un hilo, y en otro momento estar en otro hilo. Un buen ejemplo de esto sería un contenedor servlet. Su contexto lógico puede ser un servlet o una sesión, pero el ActorProxy va a ser unido al hilo, y por lo tanto compartidos a través de contextos lógicos. Si los actores no están respondiendo a la ActorProxy esto no es un gran problema, pero si lo son probablemente conducirá a problemas debido a que (a) las respuestas serán potencialmente ser recibidas por el contexto equivocado, o (b) la Nunca se reciben mensajes, y por lo tanto la pequeña fuga se ha mencionado anteriormente se convierte en uno grande como los buzones de los ActorProxies llenan.

[Editar] Hmm ... me parece que tienen un problema al leer las preguntas! Que lo rodea en el bloque actúa crea un nuevo objeto el actor que se GC'd adecuadamente cuando se termina. Tenga en cuenta que al poner el mensaje a enviar en un bloque de agente significa que el mensaje de envío se hará en una nueva reacción en otro hilo, no en el hilo de la creación del actor.

Otros consejos

No veo un problema en hacer eso. Si tiene sentido en su código, entonces ¿por qué no? Si nos fijamos en el modelo de actor todo lo puro es un actor y únicos actores se communicatinng entre sí, si usted puede diseñar su código como this..great..if no puede o no quiere entonces está bien para enviar mensajes de no actores a los actores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top