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?