Programación Concurrente
La concurrencia, en el contexto de la programación, es la capacidad de descomponer un programa en partes que pueden ejecutarse independientemente unas de otras. En esta línea, la programación concurrente es una técnica en la que dos o más procesos o hilos (threads) de un software se inician, se ejecutan de forma intercalada mediante el cambio de contexto y se completan en un período de tiempo superpuesto gestionando el acceso a recursos compartidos como, por ejemplo, en un solo núcleo de CPU.
Esto no
significa que se ejecuten varios procesos en el mismo instante de tiempo,
aunque por los resultados puede parecerlo.
Las distintas
tareas de cada proceso o de cada thread (evento o
circunstancia) que tiene que ejecutar el procesador las va ejecutando
secuencialmente una detrás de otra y de manera intercalada, pero en
instantes de tiempo tan pequeños que parece que los procesos se ejecutan de
manera simultánea.
Características
de los modelos de programación concurrente
Existen dos
modelos de programación concurrente:
Memoria
compartida
Los módulos
concurrentes interactúan leyendo y escribiendo objetos compartidos en
la memoria:
- Dos procesadores o núcleos CPU en el
mismo computador que comparten la misma memoria física.
- Dos programas que se están ejecutando
en el mismo ordenador que comparten el sistema de ficheros y que están
leyendo y escribiendo en distintos archivos.
- Dos hilos (threads) de un
programa codificado en Java que comparten los mismos objetos.
Paso de
mensajes
Los módulos
concurrentes interactúan enviándose mensajes entre sí a través
de un canal de comunicación. Los módulos mandan mensajes y los mensajes
entrantes a cada módulo se ponen en cola para su procesamiento.
- Dos equipos que se están comunicando
mediante una conexión de red.
- Un navegador y un servidor web que se
están comunicando para mostrar una página web solicitada.
- Un cliente y un servidor de mensajería
instantánea.
- Dos programas que se están ejecutando
en el mismo computador cuya entrada y salida han sido conectadas a través
de una tubería, p. ej. en Linux el comando ls | grep escrito
en el terminal.
Los modelos de
paso de mensajes y de memoria compartida tratan sobre cómo se comunican los
módulos concurrentes. Los módulos concurrentes en sí son de dos tipos:
- Proceso: instancia de un
programa en ejecución que está aislado de otros procesos en la misma
máquina. En particular, tiene su propia sección privada de la memoria de
la máquina.
- Hilo o thread: es
un lugar de control dentro de un programa en ejecución. Es como un lugar
en el programa que se está ejecutando, más la pila de llamadas a métodos
que llevaron a ese lugar al que será necesario volver.
Threads/hilos
Una
secuencia de control dentro de un proceso que ejecuta sus instrucciones de
forma independiente.
Procesos:
entidades pesadas con espacio en el núcleo.
Cambios de
contexto costosos.
Threads:
entidades ligeras en el espacio de usuario.
Cambios de
contexto poco costosos.
Programación
Paralela y Concurrente
La concurrencia
y el paralelismo han sido extensamente discutidos, pero al momento de
definirlos, varios autores salen con su propia definición y esta variedad no
hacen tan facil la tarea de entender.
En terminos
sencillos, se puede explicar asi:
- Un programa es concurrente si puede
soportar dos o más acciones en progreso.
- Un programa es paralelo si puede
soportar dos o más acciones ejecutándose simultáneamente."
Otros
- Multiprogramación
Es una técnica
de multiplexación que permite de múltiples procesos en un único procesador. Es
importante resaltar que los procesos nunca corren en paralelo en el procesador,
ya que en cada instante de tiempo solo se ejecuta un proceso en el procesador.
- Multiproceso
Es una técnica
en la cual se hace uso de dos o más procesadores en una computadora para
ejecutar uno o varios procesos.
- Procesamiento distribuido
Es cuando uno o
varios procesos son ejecutados en una o más computadores
- Planificación De Procesos
Estrategia de
los sistemas operativos con la que se es posible compartir la CPU entre los
diferentes procesos alojados en memoria. La calendarización es un manejo de
colas con el objetivo de maximizar el uso de recursos y minimizar retardos.
Beneficios
● Velocidad de
ejecución. Al subdividir un programa en procesos, éstos se pueden “repartir”
entre procesadores o gestionar en un único procesador según importancia.
● Solución a
problemas de esta naturaleza. Existen algunos problemas cuya solución es más
fácil utilizando esta metodología.
- Sistemas de control: Captura de datos, análisis y actuación (p.ej. sistemas de tiempo real).
- Tecnologías web: Servidores web que son capaces de atender varias peticiones concurrentemente, servidores de chat, email,
etc.
- Aplicaciones basabas en GUI: El usuario hace varias peticiones a la aplicación gráfica (p.ej. Navegador web).
- Simulación: Programas que modelan sistemas físicos con autonomía.
- Sistemas
Gestores de Bases de Datos: Cada usuario un proceso.
Comentarios
Publicar un comentario