Tengo problemas para entender las diferencias y el uso recomendado de dispatchers in Akka 2. Creo que entiendo cómo se comportan el BalancingDispatcher y el CallingThreadDispatcher, pero no tengo idea sobre el Dispatcher y el PinnedDispatcher. No entiendo los conceptos de Sharability
y Bulkheading
, tampoco.¿Cuáles son las diferencias y los patrones de uso para los despachadores en Akka 2?
Respuesta
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.
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.
- 1. ¿Cuáles son las diferencias de uso entre size_t y off_t?
- 2. ¿Cuáles son las diferencias entre los patrones Builder, Factory Method y Abstract Factory?
- 3. ¿Cuáles son las diferencias entre los modelos CSS y Latex?
- 4. ¿Cuáles son las diferencias entre typedef y el uso?
- 5. ¿Cuáles son las diferencias entre $ {} y # {}?
- 6. ¿Cuáles son las diferencias entre los tipos de valores y los tipos de referencia en C#?
- 7. ¿Cuáles son las alternativas de idioma y producto a Akka?
- 8. ¿Cuáles son las similitudes y diferencias entre las anotaciones Java y los atributos C#?
- 9. ¿Cuáles son las diferencias y similitudes entre MVC y MVVM?
- 10. ¿Cuáles son las diferencias reales entre los algoritmos genéticos y los algoritmos evolutivos?
- 11. ¿Cuáles son los patrones de diseño comunes en Cocoa Touch?
- 12. ¿Cuáles son las diferencias entre los algoritmos genéticos y las estrategias de evolución?
- 13. ¿Cuáles son las diferencias entre ADOdb y PDO en PHP?
- 14. ¿Cuáles son las diferencias b/w Hashtable, Dictionary y KeyValuePair?
- 15. ¿Cuáles son las diferencias entre los instaladores de MSI y EXE, y cuál debería elegir?
- 16. ¿Cuáles son las diferencias y similitudes de los sistemas de tipo Scala y Haskell?
- 17. ¿Cuáles son las diferencias entre "=" y "<-" en R?
- 18. ¿Cuáles son las principales diferencias y beneficios de los algoritmos Porter y Lancaster Stemming?
- 19. ¿Cuáles son las diferencias entre la lechuga y la pictografía?
- 20. ¿Cuáles son las diferencias entre los tipos de datos BLOB y TEXT en MySQL?
- 21. ¿Cuáles son las principales diferencias entre StringTemplate y FreeMarker?
- 22. ¿Cuáles son las diferencias entre Doctrine1 y Doctrine2?
- 23. ¿Cuáles son las principales diferencias entre las API Repa 2 y 3?
- 24. ¿Cuáles son las diferencias entre PEG y CFG?
- 25. ¿Cuáles son las diferencias entre las definiciones de parámetros como (tipo y nombre) y (tipo * nombre)?
- 26. ¿Cuáles son los casos de uso para __new__ de Python?
- 27. ¿Cuáles son las diferencias entre usar `rails server` y` rackup`?
- 28. ¿Cuáles son las diferencias entre TFS, SVN y GIT?
- 29. ¿Cuáles son las principales diferencias entre Meteor, Ember.js y Backbone.js?
- 30. ¿Cuáles son las diferencias entre JSON y JSONP?