InternacionalAcceso estudiantes

La programación concurrente y su utilidad actual y futura

La programación concurrente permite desarrollar software que ejecuta eventos o circunstancias que están sucediendo o existen al mismo tiempo.

Los módulos concurrentes interactúan enviándose mensajes entre sí.

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.

…Tarea 1 proceso 3 – Tarea 2 proceso 1 – Tarea 1 proceso 2 – Tarea 1 proceso 1 -> Núcleo CPU

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.

Generalmente, se confunde la programación concurrente con la programación en paralelo. En la programación en paralelo las tareas se ejecutan en distintos procesadores al mismo tiempo (paralelo).

…Tarea 4 proceso 1 – Tarea 3 proceso 1 – Tarea 2 proceso 1 – Tarea 1 proceso 1 -> Núcleo CPU 1

…Tarea 4 proceso 2 – Tarea 3 proceso 2 – Tarea 2 proceso 2 – Tarea 1 proceso 2 -> Núcleo CPU 2

…Tarea 4 proceso 4 – Tarea 3 proceso 3 – Tarea 2 proceso 3 – Tarea 1 proceso 3 -> Núcleo CPU 3

Los programas concurrentes son difíciles de escribir porque la gestión de procesos independientes requiere la coordinación de los recursos compartidos.

programacion-concurrente

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.

programacion-concurrente

Ejemplos de programación concurrente

La concurrencia está en todas partes en la programación moderna:

  • Varios ordenadores conectados en red.
  • Múltiples aplicaciones ejecutándose en una computadora.
  • Múltiples procesadores en una computadora (múltiples núcleos de procesador en un solo chip).

De hecho, la concurrencia es esencial en la programación moderna:

  • Los sitios web deben manejar múltiples usuarios simultáneos.
  • Las aplicaciones móviles deben realizar parte de su procesamiento en servidores cloud.
  • Las interfaces gráficas de usuario casi siempre requieren un trabajo en segundo plano que no interrumpa al usuario.

Escribir programas concurrentes no es una tarea particularmente fácil, ya que tratar con construcciones como subprocesos y bloqueos, y evitar problemas como condiciones de carrera y puntos muertos puede ser bastante engorroso. Sin embargo, ser capaz de programar con concurrencia seguirá siendo importante en el futuro.

Las velocidades de reloj del procesador ya no aumentan pero, en cambio, disponemos de más núcleos en cada nueva generación de chips. Por eso, en el futuro, para que un cómputo se ejecute más rápido, tendremos que dividirlo en partes concurrentes.

Por todo ello, la programación concurrente es uno de los temas que se estudia con detalle en el Máster en Ingeniería Matemática de UNIR.

    Títulos que te pueden interesar

    Noticias relacionadas

    El recurso preventivo, ¿en qué consiste este perfil y cuándo es necesario?

    En actividades peligrosas o con riesgos especiales, la ley obliga a las empresas a disponer de personal en el centro de trabajo que vigile el cumplimiento de la normativa de PRL.

    ¿Qué es DevSecOps y en qué consiste esta metodología?

    La metodología DevSecOps busca integrar la seguridad en todos los procedimientos para desarrollar un software con el objetivo de que sea de mayor calidad y eficiencia.

    Soy programador y no tengo trabajo, ¿qué máster estudio para conseguirlo en menos de un año?

    ¿Hay trabajo de programador en España? Mucho, y sí, se puede trabajar como programador desde casa, pero es importante que alinees tus conocimientos con lo que pide el sector.

    Docencia 100% online

    Nuestra metodología te permite estudiar sin desplazarte mediante un modelo de aprendizaje personalizado

    Clases en directo

    Nuestros profesores imparten 4.000 horas de clases online a la semana. Puedes asistir en directo o verlas en otro momento

    Mentor - UNIR

    En UNIR nunca estarás solo. Un mentor realizará un seguimiento individualizado y te ayudará en todo lo que necesites

    La fuerza que necesitas

    Nuestra vida académica y social

    Acompañamiento personalizado