7

Estoy en la fase de diseño de un lenguaje de programación, pensando actualmente en los aspectos de concurrencia. Necesito encontrar un consistency model, es decir, cómo los datos se manejan mediante procesos simultáneos programados en este idioma.Elegir un modelo de coherencia para un lenguaje de programación concurrente

Hay dos criterios importantes:

  • prefiero la facilidad de uso sobre el rendimiento, siempre y cuando la consistencia de datos permite una buena escala,
  • no puedo utilizar un modelo de consistencia que requiere el bloqueo o dinámico asignación de memoria.

Mis dos candidatos en este momento son no bloqueante memoria transaccional por un lado, y copia de paso de mensajes semántica sin compartira la Erlang.

Estoy particularmente preocupado por la facilidad de uso, por lo que voy a presentar los principales argumentos que tengo en contra de cada uno de estos dos modelos.

En el caso de STM, el usuario debe comprender qué miembros de una clase deben mutar atómicamente y delimitar correctamente las secciones de código atómico. Deben escribirse para que puedan repetirse un número indefinido de veces, no pueden realizar ninguna E/S, no pueden llamar a algunas funciones extranjeras, etc. Veo esto como algo fácil para un programador sin experiencia.

La concurrencia Erlang al estilo de compartir nada es atractiva, pero hay una pega: los procesos en tiempo real no pueden copiar los objetos que envían, porque no pueden realizar ninguna asignación de memoria y los objetos tienen que "moverse" desde uno procesar a la otra vía colas. El usuario debe tener en cuenta que si un proceso en tiempo real tiene dos referencias a un objeto, ambas referencias se borrarán si envía el objeto a otro proceso. Esto es un poco como indicadores débiles que pueden o no ser nulos en cualquier punto de uso: puede ser sorprendente.

Me inclino por el segundo modelo porque parece más fácil de entender y, naturalmente, se extiende a los sistemas distribuidos.

¿Qué me recomiendas?

  • Software no bloqueante memoria transaccional?
  • ¿Simultaneidad al estilo Erlang con las dificultades de las restricciones en tiempo real?
  • ¿Algo más que no he considerado?

Respuesta

2

He hecho un poco con Erlang, no mucho, pero aunque el paradigma de pasar mensajes sin compartir era nuevo para mí, diría que fue fácil de entender en términos visuales y físicos.

Si tu idioma va a ser generalizado, diría que el estilo Erlang es al menos algo en lo que puedo pensar sin demasiado trabajo. Supongo que otros podrán aprender y aplicar ese tipo de modelo más fácilmente que el método STM.

No hablo por experiencia, pero parece que el modelo Erlang sería más fácil de implementar, ya que no tiene que lidiar con muchas operaciones de memoria de bajo nivel, simplemente no comparte nada y administra la memoria que pasa entre los procesos.

1

No creo que un solo paradigma resuelva todos los problemas y sea incompatible. Por ejemplo, una aplicación puede usar la interfaz de paso de mensajes para alguna parte del programa y STM para otras partes, y el bloqueo directo para otras partes más específicas.

También puede consultar Join calculus (JoCaml, Boost.Join), que puede considerarse como una variante de la interfaz de paso de mensajes.

Cuestiones relacionadas