Modelos de concurrencia y memoria
Los modelos de concurrencia y memoria definen cómo se estructuran los programas concurrentes y cómo sus hilos interactuantes observan la memoria compartida, lo que sustenta el software paralelo correcto.
Definition
Los modelos de concurrencia describen cómo se componen y comunican los cálculos que se ejecutan de forma independiente, mientras que un modelo de memoria especifica qué valores pueden observar las lecturas cuando los hilos concurrentes acceden a la memoria compartida, definiendo el contrato entre el programador, el lenguaje y el hardware.
Scope
Esta área abarca el lenguaje y la teoría de la concurrencia: cálculos de procesos y modelos de concurrencia para la comunicación y sincronización, modelos de consistencia de memoria que especifican los ordenamientos permitidos de las operaciones de memoria, mecanismos de sincronización y ausencia de condiciones de carrera (data-race freedom), y sistemas de tipos para la concurrencia, como los tipos de sesión. Aborda cómo los lenguajes dan significado a los programas que se ejecutan simultáneamente y comparten estado.
Sub-topics
Core questions
- How can concurrent communicating processes be modeled and reasoned about?
- What orderings of memory operations may a program observe?
- How is freedom from data races guaranteed or specified?
- How can types discipline communication and prevent concurrency errors?
Key theories
- Cálculos de procesos
- El CSP de Hoare y el CCS y pi-cálculo de Milner proporcionan teorías algebraicas de procesos concurrentes y comunicantes, con operadores para la composición y sincronización y nociones de equivalencia conductual como la bisimulación.
- Consistencia secuencial
- Lamport definió la consistencia secuencial como el requisito de que una ejecución multiprocesador aparezca como una interconexión de las operaciones de cada procesador en orden de programa, la línea de base con la que se comparan los modelos de memoria más débiles.
- Modelos de consistencia de memoria
- Adve y Gharachorloo sistematizan el espectro de modelos de consistencia de memoria compartida, explicando cómo los ordenamientos relajados permiten el rendimiento al tiempo que complican el razonamiento sobre los programas concurrentes.
Clinical relevance
Los modelos de memoria forman parte ahora de las especificaciones de lenguajes principales (por ejemplo, en C++ y Java) porque el hardware multinúcleo hizo observables los ordenamientos relajados; acertar con ellos es esencial para un software concurrente correcto y portátil. Los cálculos de procesos y los tipos de sesión informan el diseño de lenguajes y protocolos de paso de mensajes.
History
La teoría de la concurrencia surgió de las redes de Petri y del trabajo de Hoare (CSP) y Milner (CCS) en la década de 1970, y posteriormente del pi-cálculo para procesos móviles. Lamport definió la consistencia secuencial en 1979; a medida que proliferó el hardware relajado, los modelos de memoria se formalizaron para lenguajes como Java y C++ en la década de 2000, y la semántica de memoria débil se convirtió en un área de investigación activa.
Debates
- Consistencia de memoria fuerte versus relajada
- Los diseñadores intercambian la simplicidad intuitiva de los modelos fuertes como la consistencia secuencial por el rendimiento de los modelos relajados que permiten la reordenación, lo que complica el razonamiento y requiere una semántica cuidadosa a nivel de lenguaje.
Key figures
- C. A. R. Hoare
- Robin Milner
- Leslie Lamport
- Sarita Adve
Related topics
Seminal works
- hoare1978
- milner1989
- lamport1979
- adve1996
Frequently asked questions
- ¿Qué es un modelo de memoria?
- Un modelo de memoria es el contrato formal que especifica qué valores puede devolver una lectura cuando múltiples hilos acceden a la memoria compartida, definiendo qué reordenamientos pueden realizar el compilador y el hardware y en qué puede confiar el programador.
- ¿Qué es la consistencia secuencial?
- La consistencia secuencial requiere que una ejecución concurrente se comporte como una única interconexión de las operaciones de los hilos que respete el orden del programa de cada hilo, lo que lo convierte en el modelo de memoria más intuitivo (pero a menudo relajado).