2012-03-09 12 views

Respuesta

11

Creo que la Sharability se refiere a la cantidad/tipo de actores que pueden compartir un tipo particular de despachador. No estoy seguro de que sea un mamparo, pero supongo que se refiere a una partición de actores en la que solo quieres que un actor "posea" un hilo.

Aquí están las descripciones de los comentarios de código/scaladoc para los distintos tipos de despachadores. Si hay más aclaración necesaria, por favor describa lo que está claro:

Dispatcher:

El Dispatcher basada en eventos une un conjunto de actores a un grupo de subprocesos respaldado por un BlockingQueue.

BalancingDispatcher:

An basado evento impulsado despachador ejecutor que tratará de redistribuir el trabajo de los actores ocupados a ralentí actores. Se supone que todos los actores que usan la misma instancia de este despachador pueden procesar todos los mensajes que se han enviado a uno de los actores. Es decir. los actores pertenecen a un grupo de actores, y para el cliente no hay garantía sobre qué instancia de actor realmente procesa un mensaje dado.

Aunque la técnica utilizada en esta implementación se conoce comúnmente como "robo de trabajo", la implementación real probablemente se describa mejor como "trabajo de donación" porque el actor cuyo trabajo está siendo robado toma la iniciativa.

PinnedDispatcher:

dedica un hilo único para cada actor pasado como referencia. Se sirve a través de su messageQueue.

CallingThreadDispatcher (en akka.testkit):

Dispatcher que corre invocaciones en el hilo actual. Este despachador no crea ningún subproceso nuevo, pero se puede utilizar de diferentes subprocesos al mismo tiempo para el mismo actor. La estrategia de envío es para ejecutar en el hilo actual a menos que el actor objetivo esté suspendido o ya se esté ejecutando en el hilo actual (si se está ejecutando en un hilo diferente, este hilo se bloqueará hasta que la otra invocación haya finalizado); si la invocación no se ejecuta, se pone en cola en una cola local de subprocesos para que se ejecute una vez que finaliza la invocación activa más arriba en la pila de llamadas. Esto lleva a un orden de ejecución completamente determinista si solo se usa un hilo.

La suspensión y la reanudación son acciones globales para un actor, lo que significa que pueden afectar a diferentes hilos, lo que genera complicaciones. Si los mensajes se ponen en la cola (thread-localmente) durante el período suspendido, el único hilo para ejecutarlos al continuar es el hilo que realmente llama al método de reanudación. Por lo tanto, todas las colas locales de subprocesos que no están siendo drenados actualmente (posibles, ya que suspend-queue-resume pueden suceder completamente durante una invocación en un subproceso diferente) se recogen en la cola de subproceso local actual que luego se ejecuta.Es posible suspender a un actor desde dentro de su pila de llamadas.

8

Dispatcher es la implementación predeterminada.
PinnedDispatcher tiene un hilo por actor, por lo tanto, los hilos están anclados a sus actores.

Sharability significa qué restricciones se aplican si varios actores desean utilizar la misma instancia de dispatcher.

Graneado significa el aislamiento de secciones entre sí - according to Wikipedia.

Cuestiones relacionadas