Supongo que los mensajes se recibirán y procesarán de manera segura. Sin embargo, he estado leyendo (algunos) documentos de Akka/Scala, pero aún no he encontrado la palabra clave 'threadsafe'.Actores (scala/akka): ¿está implicado que se accederá al método de recepción de forma segura para hilos?
Respuesta
Probablemente sea porque el modelo de actor asume que cada instancia de actor procesa su propio buzón secuencialmente. Eso significa que nunca debería suceder, que dos o más subprocesos simultáneos ejecutan código de instancia de actor único. Técnicamente, podrías crear un método en la clase de un actor (porque todavía es un objeto) y llamarlo desde varios hilos al mismo tiempo, pero esto sería una desviación importante de las reglas de uso del actor y lo harías "bajo tu propio riesgo", porque entonces perdería todas las garantías de seguridad de subprocesos de ese modelo.
Esta es también una de las razones por las que Akka introdujo un concepto de ActorRef, un identificador que le permite comunicarse con el actor mediante el envío de mensajes, pero no llamando directamente a sus métodos.
Creo que tenemos bastante bien documentado: http://doc.akka.io/docs/akka/2.3.9/general/jmm.html
He leído ese documento varias veces. Soy un novato de JVM; en mi entender, un 'sucede antes' solo corrobora 'visibilidad'. Todavía podemos tener problemas debido a múltiples hilos en la sección crítica. –
Akka protege contra la ejecución de mensajes para el mismo actor al mismo tiempo, permitiendo que el buzón se programe para su ejecución una sola vez. (o está programado para su ejecución o no). Al hacer que Mailbox Runnable no solo evite asignar nuevas ejecutables, sino que también podemos, a través de una simple operación CAS, asegurarnos de que un buzón solo se programe para su ejecución una vez, lo que significa que no se requiere una contabilidad adicional para garantizar que 2 los hilos no procesan el mismo buzón al mismo tiempo. –
Explicación impresionante. Esto seguramente me ayudará a seguir leyendo. Sin embargo, una pregunta, ¿cómo podría haber deducido el "procesamiento mutuamente exclusivo" del buzón de correo desde http://akka.io/docs/akka/1.2/general/jmm.html? –
Los actores son 'Treadsafe'. El Actor System (AKKA) proporciona a cada actor su propio "hilo ligero". Lo que significa que esto no es una banda de rodadura, pero el sistema AKKA dará la impresión de que un actor siempre se está ejecutando en su propio hilo para el desarrollador. Esto significa que cualquier operación realizada como resultado de actuar sobre un mensaje es, a todos los efectos, segura para subprocesos.
Sin embargo, no debe socavar AKKA utilizando mensajes mutables o de estado público. Si desarrollas tus actores para que sean unidades de funcionalidad independientes, entonces serán enhebrables.
Consulte también: http://doc.akka.io/docs/akka/2.3.12/general/actors.html#State
y http://doc.akka.io/docs/akka/2.3.12/general/jmm.html para un estudio más en profundidad del modelo de memoria AKKA y cómo se las arregla problemas 'pisada'.
- 1. usando ganchos gliloc malloc de forma segura para hilos
- 2. ¿El envío/recepción de websocket es seguro para subprocesos (se puede usar de forma segura)?
- 3. ¿Puede un entero ser compartido entre hilos de forma segura?
- 4. ¿Cómo se asegura de que varios hilos puedan acceder de forma segura a un campo de clase?
- 5. ¿Cómo se prueba un método que genera hilos?
- 6. ¿Cómo funcionan los actores en comparación con los hilos?
- 7. ¿Cómo implementar una aplicación Rails asíncrona segura para hilos?
- 8. comprensión del enhebrado de los actores en scala
- 9. Pruebas unitarias Scala actores
- 10. ¿Actores dormidos?
- 11. almacenar de forma segura las contraseñas cuando el acceso al texto en claro todavía se necesita
- 12. ¿Pueden los hilos leer de forma segura las variables establecidas por los eventos VCL?
- 13. ¿Puedo usar boost :: threadpool como una 'cola segura para hilos'?
- 14. Varios hilos que pasan una referencia de objeto al método de ayudante estático
- 15. Obtener el nombre del método actual que se está ejecutando
- 16. cola segura para hilos sin bloqueo en C++?
- 17. ¿Cómo se almacenan los hashes de contraseña de forma segura en la memoria, al crear cuentas?
- 18. Sintaxis interesante de PHP: ¿'implicado si'?
- 19. Cómo designar un grupo de subprocesos para actores
- 20. ¿Se pueden eliminar de forma segura entradas antiguas en sales_flat_quote?
- 21. ¿Cómo hacer que una clase singleton sea segura para los hilos?
- 22. ¿Una forma segura de evitar que la biblioteca de imágenes GD se quede sin memoria? (PHP)
- 23. Almacenar una contraseña de forma segura
- 24. ¿La lista de hilos del kernel de Linux es segura?
- 25. ¿Cómo se puede dejar que los usuarios ejecuten código de Ruby de forma segura?
- 26. hilos que activan C#
- 27. forma más segura de guardar archivos subidos
- 28. gancho de pre-recepción GIT
- 29. Manejo de propiedades Cambiado de forma segura
- 30. ¿Cómo leer de forma segura las propiedades de un WebScriptObject?
Gracias Przemek. Eso explica. –