Modulo 1 - Programación Concurrente
Modulo 1 - Programación Concurrente
Concurrente
Algoritmos
Concurrentes y
Paralelos
1
1. Introducción
La concurrencia en sistemas de software hace referencia a los procesos del
sistema que se ejecutan en forma simultánea y que, en algunos casos,
pueden interactuar entre sí. Un sistema informático distribuido es la
Cuando se habla de arquitectura de sistema que logra que un conjunto de computadoras,
concurrencia se hace estaciones de trabajo y servidores se comporten como sistema informático
referencia a tareas, único. En este tipo de entorno informático, los usuarios desconocen dónde
actividades o procesos se están ejecutando sus procesos, pero pueden utilizarlos desde cualquier
que ocurren en un
mismo momento de
punto del sistema sin ningún tipo de restricción.
tiempo.
Los sistemas informáticos distribuidos y concurrentes han sido estudiados
extensamente, lo que ha llevado a plantearse las dificultades por resolver y
los beneficios de usar dichos sistemas. Los actuales avances en el
procesamiento y la tecnología de redes y herramientas de software hacen
factible lograr las siguientes ventajas:
mayor rendimiento;
compartir recursos;
mayor extensibilidad;
mayor confiabilidad, disponibilidad y tolerancia a fallas;
rentabilidad.
2
programación de tareas y asignación de recursos políticas y mecanismos,
control de consistencia, control de concurrencia y seguridad, por nombrar
solo algunos. Deben considerarse dificultades como la falta de madurez en
el campo de la computación distribuida y concurrente, el comportamiento
asincrónico e independiente de los sistemas y el comportamiento
relacionado con la dispersión geográfica.
3
paralela, pero enfatiza más la interacción entre tareas.
Así, la correcta secuencia de interacciones o
comunicaciones entre los procesos y los nodos los
procesos coordinados de recursos que se comparten por
tareas son las claves de esta disciplina. (“Procesos
concurrentes”, s. f., https://bit.ly/2JKplKP).
4
2. Características y evolución
histórica
Tom Kilburn y David Howarth fueron pioneros en el uso de interrupciones
para simular ejecución simultánea (concurrencia) de varios programas en la
computadora Atlas y esta técnica de programación se conoció como
multiprogramación. Los primeros sistemas de multiprogramación fueron
programados en lenguaje ensamblador, sin ningún fundamento ni marco
conceptual. El menor error de programación podía hacer que estos
sistemas se comporten de una manera completamente errática, haciendo
que las pruebas de los programas fueran casi imposibles.
5
De alguna forma, el desarrollo de la programación concurrente fue
motivado originalmente, por el deseo de desarrollar sistemas operativos
fiables.
Fueron pioneros en este campo: Edsger Wybe Dijkstra, Per Brinch Hansen y
Charles Antony Richard.
6
Figura 2: Edsger Dijkstra
Fuente: [Imagen sin título sobre Brinch Hansen]. (1959). Recuperada de https://goo.gl/wcZasD
7
encuentran el algoritmo quicksort, el algoritmo de ordenación más
ampliamente usado en el mundo, cuyo origen se debió a la necesidad
de ordenar una lista de palabras como en un diccionario y para lo cual
se basó en la técnica “divide y vencerás”, a partir del cual convirtió un
problema complejo en muchos más simples. En su artículo de 1969,
“An axiomatic basis for computer programming”, se enuncian unas
leyes lógicas que permiten comprender el significado de los programas,
independientemente de las máquinas que los ejecutan. Esta lógica
(lógica Hoare, en su honor) proporcionó las reglas matemáticas de
inferencia para razonar sobre la corrección de programas imperativos.
Hoare también desarrolló el lenguaje formal CSP (communicating
sequential processes), que es un lenguaje formal para describir
patrones de interacción en sistemas concurrentes. También sirve de
base para la definición del lenguaje de programación Occam.
8
3. Herramientas de desarrollo
concurrente
En la programación concurrente, los lenguajes suelen usar diferentes
herramientas para el desarrollo del entorno de programación:
9
4. Aplicaciones concurrentes.
Ventajas e inconvenientes
Al momento de desarrollar aplicaciones concurrentes, es necesario tener
en cuenta algunos aspectos como sus ventajas e inconvenientes. Existen
ejemplos de aplicaciones, tanto reales como académicas, que también
pueden ilustrar algunas de las dificultades que se encuentran durante el
desarrollo de una aplicación concurrente.
4.1. Ventajas
Velocidad de ejecución: el hecho de disponer de múltiples
actividades dentro de la aplicación permite que esta pueda concluir
su trabajo de manera más rápida.
10
estas aplicaciones se implantan como programas concurrentes,
resulta más sencillo su diseño que si se intentara implantarlas como
un solo programa secuencial.
4.2. Desventajas
11
5. Aplicaciones reales
En esta sección revisaremos ejemplos de aplicaciones concurrentes reales,
Dos aplicaciones claras que proporcionarán la base para comprender algunos de los aspectos que
de los algoritmos
revisaremos posteriormente:
concurrentes son los
propios sistemas
operativos modernos, 1) Servidor web Apache: Apache es un servidor web gratuito y de código
que realizan múltiples abierto que emplea programación concurrente. El objetivo de un
operaciones en forma servidor web es la gestión de cierto conjunto de páginas web ubicadas
concurrente, y el en ese servidor. Dichas páginas resultan accesibles utilizando el
software de simulación
protocolo HTTP (o hypertext transfer protocol). Los navegadores deben
científica, que es
ejecutado en clusters realizar peticiones a estos servidores para obtener el contenido de las
computacionales páginas que muestran en sus ventanas.
(arquitectura paralela y
distribuida). El trabajo de un servidor web es proveer a muchos usuarios diferentes y
al mismo tiempo diferentes páginas. En este contexto, se vuelve
interesante tener múltiples hilos de ejecución, permitiendo que cada
uno de ellos atienda a un cliente distinto; de esta manera, habilita la
paralelización de la gestión de múltiples clientes (Bustos, 2018).
12
Podemos identificar muchas otras aplicaciones concurrentes, como
servidores en la nube procesando requerimientos de múltiples usuarios,
aplicaciones como el entorno Eclipse, que compila código
concurrentemente mientras editamos, y hasta nuestros propios celulares
inteligentes, que procesan aplicaciones de mensajería, captura de video y
edición al mismo tiempo, etcétera.
13
Referencias
Bustos, G. (2018). ¿Qué es Apache? Descripción completa del servidor web
Apache. Recuperado de https://www.hostinger.mx/tutoriales/que-es-apache/
San Jose State University (s. f.). Procesos e hilos error marcador no
definido hilo. Recuperado de
https://www.coursehero.com/file/p7cof4i/Procesos-e-Hilos-Error-
Marcador-no-definido-Hilo-Error-Marcador-no-definido/
14