-
Notifications
You must be signed in to change notification settings - Fork 0
Tema 1
Un programa "ordinario" consiste en declaraciones de datos y declaraciones de asignación y flujo de control en un lenguaje de programación. Los lenguajes modernos incluyen estructuras como procedimientos y módulos para organizar grandes sistemas de software mediante abstracción y encapsulación, pero las declaraciones que realmente se ejecutan siguen siendo las declaraciones elementales que computan expresiones, mueven datos y cambian el flujo de control. De hecho, estas son precisamente las instrucciones que aparecen en el código de máquina que resulta de la compilación. Estas instrucciones de la máquina se ejecutan secuencialmente en una computadora y acceden a los datos almacenados en las memorias principales o secundarias.
Un programa concurrente es un conjunto de programas secuenciales que se pueden ejecutar en paralelo. Usamos el proceso de palabras para los programas secuenciales que comprenden un programa concurrente y guardamos el término programa para este conjunto de procesos.
Tradicionalmente, la palabra paralelo se usa para sistemas en los que las ejecuciones de varios programas se superponen en el tiempo ejecutándolas en procesadores separados. La palabra concurrente se reserva para el paralelismo potencial, en el cual las ejecuciones pueden, pero no necesariamente, superponerse; en cambio, el paralelismo solo puede ser aparente ya que puede implementarse compartiendo los recursos de un pequeño número de procesadores, a menudo solo uno. La concurrencia es una abstracción extremadamente útil porque podemos entender mejor dicho programa al pretender que todos los procesos se ejecutan en paralelo. Por el contrario, incluso si los procesos de un programa concurrente se ejecutan en paralelo en varios procesadores, la comprensión de su comportamiento se facilita enormemente si imponemos un orden en las instrucciones que es compatible con la ejecución compartida en un solo procesador. Como cualquier abstracción, la programación concurrente es importante porque el comportamiento de una amplia gama de sistemas reales se puede modelar y estudiar sin detalles innecesarios.
En este libro definiremos modelos formales de programas concurrentes y algoritmos de estudio escritos en estos formalismos. Debido a que los procesos que comprenden un programa concurrente pueden interactuar, es extremadamente difícil escribir un programa correcto incluso para el problema más simple. Se necesitan nuevas herramientas para especificar, programar y verificar estos programas. A menos que se entiendan, un programador acostumbrado a escribir y probar programas secuenciales quedará totalmente desconcertado por el extraño comportamiento que puede exhibir un programa concurrente.
La programación concurrente surgió de los problemas encontrados en la creación de sistemas reales.