Programacion Concurrente Y Paralela
Enviado por ariacna20 • 22 de Marzo de 2013 • 1.632 Palabras (7 Páginas) • 622 Visitas
MARCO TEORICO
¿Qué es programación concurrente?
Se conoce por programación concurrente a la rama de la informática que trata de las notaciones y técnicas de programación que se usan para expresar el paralelismo potencial entre tareas y para resolver los problemas de comunicación y sincronización entre procesos.
En la programación concurrente se supone que hay un procesador utilizable por cada tarea; no se hace ninguna suposición de si el procesador será una unidad independiente para cada uno de ellos o si será una sola CPU que se comparte en el tiempo entre las tareas. Independientemente de cómo se vaya a ejecutar realmente el programa, en un sistema uniprocesador o multiprocesador, el resultado debe ser el correcto. Por ello, se supone que existe un conjunto de instrucciones primitivas que son o bien parte del S.O. o bien parte de un lenguaje de programación, y cuya correcta implementación y corrección está garantizada por el sistema.
Los primeros programas concurrentes fueron los propios Sistemas Operativos de multiprogramación en los que un solo procesador de gran capacidad debía repartir su tiempo entre muchos usuarios. Para cada usuario, la sensación era que el procesador estaba dedicado para él. Durante la década de los sesenta y setenta esto fue así. La programación de sistemas con capacidades de concurrencia se hacía a bajo nivel, en ensamblador, pues aparte de no disponer de lenguajes de alto nivel con capacidades de concurrencia, se primaba la supuesta eficiencia del código escrito directamente en ensamblador. La aparición en 1972 del lenguaje de alto nivel Concurrent Pascal [Brinch-Hansen, 1975], desarrollado por Brinch Hansen, se encargó de romper este mito y abrir la puerta a otros lenguajes de alto nivel que incorporaban concurrencia.
Desde entonces la programación concurrente ha ido ganando interés y actualmente se utiliza muy a menudo en la implementación de numerosos sistemas. Tres grandes hitos se nos antojan importantes para que la programación concurrente actualmente sea tan importante:
• La aparición del concepto de thread o hilo que hace que los programas puedan ejecutarse con mayor velocidad comparados con aquellos que utilizan el concepto de proceso.
• La aparición más reciente de lenguajes como Java, lenguaje orientado a objetos de propósito general que da soporte directamente a la programación concurrente mediante la inclusión de primitivas específica.
• La aparición de Internet que es un campo abonado para el desarrollo y la utilización de programas concurrentes. Cualquier programa de Internet en el que podamos pensar tales como un navegador, un chat, etc. están programados usando técnicas de programación concurrente.
En lo que resta de capítulo introduciremos el concepto de programación concurrente, los beneficios que reporta, el hardware en el que puede ejecutarse, la forma de especificarlo en un lenguaje y las características, problemas y propiedades de corrección de un programa concurrente.
Según el diccionario de la Real Academia Española, una de las acepciones de la palabra concurrencia es:
“Acaecimiento o concurso de varios sucesos en un mismo tiempo”.
Si en esta definición sustituimos la palabra suceso por proceso ya tenemos una primera aproximación a lo que va a ser la concurrencia en computación.
Puesto que en la definición anterior y en la que daremos posteriormente de la programación concurrente aparece la palabra proceso y ésta está basado en el concepto de programa, se hace necesario dejar claro en este punto qué se va a entender tanto por programa como por proceso.
Concurrencia
Dos procesos serán concurrentes cuando la primera instrucción de uno de ellos se ejecuta después de la primera instrucción del otro y antes de la última. Es decir, existe un solapamiento en la ejecución de sus instrucciones. No tienen por qué ejecutarse exactamente al mismo tiempo, simplemente es suficiente con el hecho de que exista un intercalado entre la ejecución de sus instrucciones. Si se ejecutan al mismo tiempo los dos procesos, entonces tenemos una situación de programación paralela. La programación concurrente es un paralelismo potencial. Dependerá del hardware subyacente como veremos más adelante.
Programación concurrente
Es la disciplina que se encarga del estudio de las notaciones que permiten especificar la ejecución concurrente de las acciones de un programa, así como las técnicas para resolver los problemas inherentes a la ejecución concurrente, que son básicamente comunicación y sincronización.
Como puede intuirse, el trabajar con procesos concurrentes va a añadir complejidad a la tarea de programar
Beneficios de la programación concurrente
Existen diversos motivos por los que la programación concurrente es útil. Destacaremos aquí dos de ellos: velocidad de ejecución y solución de problemas de naturaleza concurrente y otros beneficios adicionales como el mejor aprovechamiento de la CPU
¿Qué es programación Paralela?
Gracias a las progresivas mejoras tecnológicas desarrolladas durante las décadas pasadas, la capacidad de procesamiento de los ordenadores ha aumentado cada vez más. De todas formas, estas mejoras tecnológicas
-integración VLSI, aumento de la frecuencia de reloj en los procesadores, etc.- tienen un límite físico, por lo cual el aumento de capacidad de procesamiento no es ilimitado. Hay una serie de problemas que no se pueden resolver con este tipo de ordenadores: la circulación atmosférica y el tiempo, la evolución de las galaxias, problemas de sistemas expertos e inteligencia artificial, etc. Para la resolución de estos problemas se está investigando intensamente desde hace dos décadas en el procesamiento
...