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

Entradas más populares de este blog