riba para metodologia mantenimiento ingenieria diseño concurrente carles design scala erlang actor agent

design - metodologia - Patrones de diseño para el diseño concurrente basado en agente/actor



diseño para el mantenimiento ingenieria concurrente (3)

Hice una pregunta similar here que tenía algunas respuestas razonables que pueden ayudar. Estoy mirando el tuyo con cuidado. Todavía no he encontrado algo que realmente me haya ayudado, pero estoy buscando activamente.

Creo que el cambio de mentalidad es la barrera más grande para avanzar hacia arquitecturas e idiomas simultáneos y hasta que eso no se resuelva, los desarrolladores se quedarán con paradigmas de estilo MS fáciles de aprender. Para que realmente se convierta en una corriente principal, debe llegar a las escuelas y enseñarse junto con C # y VB.

Mi respuesta a la pregunta de los programadores de 2080 es "concurrentemente".

Recientemente he estado ingresando a lenguajes alternativos que admiten una arquitectura de actor / agente / nada compartido, es decir. scala, clojure, etc. (clojure también es compatible con estado compartido).

Hasta ahora, la mayoría de la documentación que he leído se centra en el nivel de introducción. Lo que estoy buscando es documentación más avanzada a lo largo de la pandilla de los cuatro, pero en su lugar no se compartió nada.

Por qué ? Ayuda a asimilar el cambio en el pensamiento de diseño. Los ejemplos simples son fáciles, pero en una aplicación Java del mundo real (de un solo hilo) puede tener gráficos de objetos con miles de miembros con relaciones complejas. Pero con el desarrollo de simultaneidad basado en agentes, introduce un nuevo conjunto de ideas para comprender al diseñar sistemas grandes. es decir. Granularidad del agente: la cantidad de estado que debe administrar un agente, implicaciones en el rendimiento, etc., o son sus buenos patrones para asignar gráficos de objetos de estado compartido al sistema basado en agentes. consejos para mapear modelos de dominio para diseñar. Las discusiones no versan sobre la tecnología sino sobre cómo utilizar MEJOR la ​​tecnología en el diseño (los ejemplos "complejos" del mundo real serían geniales).


Incluso si no puedo encontrar ejemplos buenos del mundo real que le proporcionen patrones de diseño, hay algunos lugares donde comenzar.

El primero es lograr que su cabeza se ajuste adecuadamente a los conceptos. Un libro que lo ayuda a hacer esto es Hacer sistemas distribuidos confiables en presencia de errores de software escritos por un Erlang Guru Joe Armstrong donde explica la Programación Orientada a la Concurrencia de una manera muy accesible. De hecho, es un Ph.D. tesis, pero no dejes que eso te asuste. Es mucho más fácil de leer, y agradable en el trato, que la mayoría de los libros de texto comunes.

Ver los sistemas reales normalmente significa que tienes que aprender demasiado sobre el lenguaje real para que también tenga sentido solo para evaluar las cosas. Para Erlang, la documentation proporciona una metodología de diseño y comportamientos (Erlang speek para bibliotecas de patrones de diseño). Esto ilustrará los patrones de diseño más comúnmente utilizados en esta configuración. Y estos han demostrado ser efectivos en la construcción de sistemas a gran escala, es decir, millones de líneas de código (comparable a un factor de 4 a 10 de otros lenguajes como Java) y milloins de procesos concurrentes que se ejecutan en una máquina en clusters distribuidos de máquinas. Un ejemplo reciente de un sistema real en vivo es Facebook Chat .

Para los otros marcos, realmente no puedo ayudarte, tengo miedo.


Un "actor" es en sí mismo el patrón unificador para la programación concurrente (una cola de mensajes asíncrona más un contexto de ejecución para procesarla), pero hay muchos patrones de diseño que ayudan a especificar aspectos o elementos de los sistemas basados ​​en agentes. Muchos de los más comunes se pueden encontrar en el artículo de Wikipedia sobre Concurrency Patterns . Algunos aspectos destacados:

Si aún no lo ha encontrado, Akka puede ser de su interés, es un marco de actor impulsado por eventos "puramente" que se ejecuta en la JVM.