Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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 arquitectura de sistema que logra que un
conjunto de computadoras, estaciones de trabajo y servidores se comporten como
sistema informático único. En este tipo de entorno informático, los usuarios desconocen
dónde se están ejecutando sus procesos, pero pueden utilizarlos desde cualquier punto
del sistema sin ningún tipo de restricción.
mayor rendimiento;
compartir recursos;
mayor extensibilidad;
mayor confiabilidad, disponibilidad y tolerancia a fallas;
rentabilidad.
Los sistemas concurrentes posibilitan que las operaciones pueden ser ejecutadas en un
solo procesador, en múltiples procesadores en un solo equipo o en múltiples
procesadores en equipos separados, físicamente o virtualmente, y, por supuesto,
permitiendo distintos hilos de ejecución. Existen diversos modelos matemáticos para el
cálculo de la concurrencia, como las redes de Petri, los procesos Calculi, el modelo
máquina de accesos random en paralelo, o bien el modelo actor y el lenguaje reo (San
Jose State University , s. f.).
Los procesos en un sistema concurrente pueden interactuar entre ellos mientras se están
ejecutando en el mismo equipo o en múltiples equipos. Dado esto, el número de
combinaciones posibles en su ejecución por sus estados tiende a ser extremadamente
grande, lo que da como resultado final la posibilidad de ser indeterminado. Cuando el uso
de recursos compartidos es concurrente, tiende a problemas de indeterminación dirigida
a bloqueo mutuo e inanición (starvation) (“Sistemas distribuidos”, 2018).
A mediados de la década de 1960, los informáticos dieron los primeros pasos hacia una
investigación más profunda de la programación concurrente. En menos de quince años,
conceptos fundamentales fueron descubiertos y expresados mediante notación de
programación, que más tarde fueron utilizados para construir lenguajes de programación,
y estos usados para desarrollar sistemas operativos.
Existen varios hitos que fortalecen el hecho de que la programación concurrente sea tan
importante, a saber:
El desarrollo del concepto de thread o hilo: esto les permite a los programas
ejecutarse con mayor velocidad en comparación con los programas que utilizan el
concepto de proceso (los hilos se distinguen de los procesos en el hecho de que
estos son, por lo general, independientes, por lo que guardan información de
estados e interactúan a través de mecanismos de comunicación del sistema; en
cambio, los hilos, generalmente, comparten recursos de forma directa) (Historia de
la programación concurrente, 2013).
La aparición y desarrollo de Internet: es conocida también como la red de redes.
Esto nos conduce a pensar en sistemas distribuidos, lo que fomenta el desarrollo y
la utilización de programas concurrentes.
La aparición y fácil disponibilidad de lenguajes orientados a objetos de
propósito general, como JAVA, que brindan librerías para la programación
concurrentes ha fortalecido el hecho de que aparezcan más personas capacitadas
en este tipo de desarrollo y, a su vez, más interés en ello (Gamavi, 2008).
Fueron pioneros en este campo: Edsger Wybe Dijkstra, Per Brinch Hansen y Charles
Antony Richard.
Charles Antony Richard Hoare, también conocido como Tony Hoare, es un científico
en computación de origen británico. Recibió el premio Turing en 1980, fue
nombrado miembro de la Royal Society en 1982 y sir por la reina británica en 2000.
Actualmente, es investigador principal en el Microsoft Research Center de
Cambridge. Entre sus aportes se 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.
5. Aplicaciones reales
En esta sección revisaremos ejemplos de aplicaciones concurrentes reales, que
proporcionarán la base para comprender algunos de los aspectos que revisaremos
posteriormente:
1. Servidor web Apache: Apache es un servidor web gratuito y de código abierto que
emplea programación concurrente. El objetivo de un servidor web es la gestión de
cierto conjunto de páginas web ubicadas en ese servidor. Dichas páginas resultan
accesibles utilizando el protocolo HTTP (o hypertext transfer protocol). Los
navegadores deben realizar peticiones a estos servidores para obtener el contenido
de las páginas que muestran en sus ventanas.
Para que la propia gestión de los hilos no genere un alto esfuerzo, Apache utiliza un
conjunto de hilos (o thread pool) en espera, que, a su vez, son coordinados por un
hilo adicional (una suerte de dispacher o coordinador) que atiende las peticiones
que van llegando; de esta manera, asocia cada petición a los hilos del conjunto que
queden disponibles.
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/