He estado trabajando con akka durante 7-8 meses a diario. Cuando comencé, estaba trabajando en aplicaciones y noté que los actores se usarían básicamente en cualquier lugar una vez dentro del sistema de actores para comunicarse entre la mayoría de los objetos. Así que hice lo mismo: girar a otro actor para x / y / z.
Me parece que esto puede ser demasiado indiscriminado, agregando complejidad donde no se necesita, pero no puedo encontrar ninguna discusión sobre dónde deberían usarse los actores frente a la lógica síncrona simple o incluso asíncrona a través de futuros. Comencé a reflexionar sobre mi postura después de que mi compañero de trabajo mencionó algo similar. Me di cuenta de varios casos más recientes en los que he reflexionado sobre una tarea y luego evité crear otro actor porque podría lograr el mismo resultado de forma segura en una implementación inmutable, por ejemplo, algo como obtener valores de configuración de un archivo o archivo en algún lugar al que accedes con poca frecuencia y lo harás Espere a que el resultado sea el caso de uso real.
En particular, me parece que en cualquier caso en el que juegas con un estado inmutable, los actores crean complejidad y limitan el rendimiento: una función pura en un objeto, por ejemplo, se puede llamar simultáneamente sin ningún riesgo con ningún nivel de concurrencia, aún un actor solo puede procesar un mensaje a la vez. La consideración alternativa es que estacionará el hilo si necesita esperar el resultado a menos que comience a usar futuros, pero en los casos en que no necesita preocuparse por la mensajería asíncrona o la escala, parece que puede ser excesivo contratar a un actor.
Entonces mi pregunta es: ¿hay un mal momento para usar actores? Tengo curiosidad por cómo se ve Erlang y realmente me gustaría la visión de otras personas. O si hay algunos principios en torno al uso del actor.
ask
un actor y solo usar un plano Future
.