2012-03-02 20 views
7

He leído la documentación de akka y no puedo obtener una comprensión clara de la interacción del hilo mientras uso akka. Los doctores pueden omitir esto como obvio, pero no es tan obvio para mí.¿Cómo puede un actor akka interactuar entre hilos?

Todos los actores de akka parecían ejecutarse en el mismo hilo que se les llama. Veo a los actores como co-procedimientos que solo tenían restablecer la pila cada vez que recibían llamadas.

Puede realizar una gran cadena de actores cambiando en línea recta. Cada recepción realiza una operación pequeña sin bloqueo y obliga a otra recepción a trabajar más. No hay ningún bucle de evento que pueda manejar mensajes fuera del sistema actor.

Me gustaría obtener una solicitud de otro hilo, realizar operaciones de control y esperar otro mensaje.

Hay algunos casos de uso que describen mis necesidades.

  1. Hay hilos que constantemente sondean datos de algunas fuentes. Una vez que los datos coinciden con el patrón, invoca un controlador basado en eventos basado en actores. El controlador lógico toma una decisión y la pasa a los trabajadores. Debería haber dos hilos persistentes. Uno de los hilos funciona constantemente en el sondeo y otro funciona de forma asíncrona para controlarlo. No debes dejar que los actores akka se filtren primero ya que rompieron los períodos de votación y el primer tema no debería bloquear a los actores, por lo que necesitan otro hilo.

  2. Hay algún tipo de juego de mesa de dos lados. Un lado tiene un hilo de control que programa el tiempo de cálculo funciona interactúa con el servidor de placa y etcétera. Otro hilo es un hilo de cálculo pesada que se repite en diferentes variantes y no podía ser escrito en akka ya que bloquea la naturaleza

I conscientes de los futuros akka existente, pero representan una tarea de trabajo que se ejecute una vez despedido y cerrar abajo después de realizar su objetivo. Los futuros están bien combinados con actores Akka, pero no pueden expresar hilos de trabajo en bucle.

El sistema Akka actor incorpora diferentes tipos de bucles de eventos de red. Puede usar su sistema de actor remoto incorporado o el bien conocido protocolo 0mq. Pero usar la red para las interacciones de hilos me parece una exageración.

¿Cuál es la supuesta forma de pegar hilo que no sea akka con akka one? ¿Debo escribir un par de procedimientos especiales para realizar el envío de mensajes de manera segura para hilos?

+1

Bueno, no creo que omitamos todo eso: http://akka.io/docs/akka/2.0-RC4/scala/dispatchers.html –

+0

Una corrección más: los actores Akka no se ejecutan en el mismo thread they are called, mira mi comentario anterior para docs. Los actores no son co-procedimientos. El "restablecimiento de pila" no es un concepto admitido por la JVM. El modelo de actor es un nivel de abstracción más alto que los hilos. Pasar mensajes a un actor siempre es seguro para subprocesos (consulte 'ActorRef.tell()') –

+0

Le sugiero que compruebe akka con la integración apache camel para saber cómo responder a los eventos externos. El libro Akka Essentials http: //www.packtpub.com/akka-java-applications-essentials/book tiene una descripción clara del modelo de subprocesamiento con un montón de código de ejemplo ejecutable en Java y Scala para obtener todos los fundamentos. – simbo1905

Respuesta

4

Si necesita un sondeo, el hilo de sondeo debería simplemente convertir lo que se sondeó en un mensaje y enviarlo a un actor.

Encuentro más útil usar un Actor con un receiveTimeout para realizar sondeos no bloqueantes en un intervalo, y cuando hay algo que se sondea, lo publicará en algún otro actor, o quizás incluso en el ActorSystems 'EventStream , para una verdadera acción pub-sub.

+0

¿en qué hilo se ejecutaría el actor? ¿Qué hay debajo de un sistema de actores? ¿Qué hilos usa para mantener su propia actividad? – ayvango

+0

En mi caso estoy usando akka para controlar la aplicación swing con control de visor 3D. Así que pienso en combinar tres bucles de eventos diferentes sin condiciones y bloques de carrera. Necesito más datos sobre la estructura del sistema akka para construir una arquitectura correcta. – ayvango

+2

Tenemos ~ 350 páginas de documentación: http://doc.akka.io –

Cuestiones relacionadas