scala architecture erlang actor

scala - ¿El modelo de actor está limitado a idiomas específicos?



architecture erlang (4)

Estaba leyendo una interesante publicación de blog sobre Erlang y el modelo de actor. También escuché que scala admite el modelo de actor. De lo poco que he reunido hasta ahora, el modelo de actor descompone el procesamiento en componentes que se comunican entre sí transmitiendo mensajes. Típicamente, esos procesos son inmutables.

¿Son esas características específicas del lenguaje, o más, en el nivel de la arquitectura? más específicamente, ¿no puede simplemente implementar el mismo modelo de actor en casi cualquier idioma, y ​​simplemente usar alguna forma de cola de mensaje para pasar mensajes entre procesos de trabajo? (por ejemplo, use algo como el apio ). ¿O es que esos lenguajes como erlang y scala simplemente lo hacen de forma transparente y mucho más rápido ?


Ciertamente, puede definir una "Biblioteca de actores" en prácticamente cualquier idioma, pero en Erlang, el modelo está integrado en el idioma y es realmente el único modelo de simultaneidad disponible.

Si bien el sistema de actores de Scala está bien implementado, al final del día, sigue siendo vulnerable a algunos peligros de los que Erlang es inmune. Llamaré su atención sobre este artículo .

Este sería el caso para cualquier biblioteca Actor implementada en cualquier lenguaje imperativo que admita el estado mutable compartido.

Una excepción interesante a esto es Nodes.js. Se está trabajando con actores entre Nodos que probablemente exhiban las mismas propiedades de aislamiento que Erlang, simplemente porque no hay un estado mutable compartido.


El modelo de actor no está limitado a ninguna plataforma específica o lenguaje de programación, es solo un modelo después de todo.

Erlang y Scala tienen implementaciones realmente buenas y útiles de este modelo, que se adapta muy bien a la típica pila tecnológica de estas plataformas y ayuda a resolver efectivamente ciertos tipos de tareas.


No, no hay nada específico del idioma sobre el Modelo Actor. De hecho, ya mencionas Scala en tu pregunta, donde los actores no son parte del lenguaje, sino que se implementan como una biblioteca. (Tres bibliotecas competidoras, en realidad)

Sin embargo, al igual que la Programación Funcional o la Programación Orientada a Objetos, tener soporte directo para la Programación de Actor, o al menos soporte para algunas abstracciones que lo hacen más fácil de implementar, en el lenguaje conducirá a una experiencia de programación muy diferente. Cualquiera que haya hecho Programación Funcional u Programación Orientada a Objetos en C probablemente lo entienda.


Para agregar a los puntos mencionados anteriormente, el hecho de que en el modelo de actor Erlang es la única forma en que puede programar, hace que su código sea escalable desde el principio. Los procesos de Erlang son livianos, y puedes generar 10-100K en una máquina (no creo que puedas hacerlo con python), esto cambia la forma en que abordas los problemas. Por ejemplo, en nuestro producto analizamos los registros del servidor web con Erlang y generamos un proceso Erlang para manejar cada línea. De esta forma, si una línea de registro está dañada o el proceso que la maneja falla, nada les sucede a los demás. Otra diferencia es que cuando comienzas a utilizar OTP obtienes supervisores de procesos y puedes hacer que los procesos estén conectados, de modo que si uno termina, todos los demás lo hacen. Aparte de eso, Erlang tiene otra característica agradable (que se puede encontrar en otros idiomas a través de las bibliotecas, pero de nuevo aquí está integrada) como la coincidencia de patrones y la implementación en caliente.