En este módulo, exploraremos los conceptos de concurrencia y procesamiento paralelo en MUMPS. Estos conceptos son cruciales para mejorar el rendimiento y la eficiencia de las aplicaciones, especialmente cuando se manejan grandes volúmenes de datos o se realizan operaciones complejas.

  1. Introducción a la Concurrencia y el Procesamiento Paralelo

¿Qué es la Concurrencia?

La concurrencia se refiere a la capacidad de un sistema para manejar múltiples tareas al mismo tiempo. En MUMPS, esto se puede lograr mediante el uso de procesos y subprocesos que se ejecutan simultáneamente.

¿Qué es el Procesamiento Paralelo?

El procesamiento paralelo implica dividir una tarea en sub-tareas más pequeñas que se pueden ejecutar simultáneamente en diferentes procesadores o núcleos. Esto puede mejorar significativamente el rendimiento de las aplicaciones.

  1. Procesos en MUMPS

Creación de Procesos

En MUMPS, los procesos se pueden crear utilizando el comando JOB. Este comando permite iniciar un nuevo proceso que puede ejecutar una rutina específica.

; Ejemplo de creación de un proceso en MUMPS
STARTJOB
    JOB ^MYROUTINE
    QUIT

MYROUTINE
    WRITE "Este es un proceso paralelo", !
    QUIT

Explicación del Código

  • STARTJOB: Es una etiqueta que inicia la rutina.
  • JOB ^MYROUTINE: Crea un nuevo proceso que ejecuta la rutina MYROUTINE.
  • MYROUTINE: Es la rutina que se ejecuta en el nuevo proceso. En este caso, simplemente escribe un mensaje en la pantalla.

Ejercicio Práctico

Crea una rutina que inicie dos procesos paralelos, cada uno de los cuales debe escribir un mensaje diferente en la pantalla.

; Solución del ejercicio
STARTJOBS
    JOB ^PROCESS1
    JOB ^PROCESS2
    QUIT

PROCESS1
    WRITE "Proceso 1 ejecutándose", !
    QUIT

PROCESS2
    WRITE "Proceso 2 ejecutándose", !
    QUIT

  1. Sincronización de Procesos

Variables Globales para Sincronización

Las variables globales en MUMPS pueden ser utilizadas para sincronizar procesos. Por ejemplo, se puede utilizar una variable global como un semáforo para controlar el acceso a un recurso compartido.

; Ejemplo de sincronización de procesos
STARTSYNC
    SET ^SEMAFORO=0
    JOB ^PROCESS1
    JOB ^PROCESS2
    QUIT

PROCESS1
    FOR  DO  QUIT:^SEMAFORO=0
    . SET ^SEMAFORO=1
    . WRITE "Proceso 1 accediendo al recurso", !
    . SET ^SEMAFORO=0
    QUIT

PROCESS2
    FOR  DO  QUIT:^SEMAFORO=0
    . SET ^SEMAFORO=1
    . WRITE "Proceso 2 accediendo al recurso", !
    . SET ^SEMAFORO=0
    QUIT

Explicación del Código

  • ^SEMAFORO: Es una variable global utilizada como semáforo.
  • FOR DO QUIT:^SEMAFORO=0: Un bucle que espera hasta que el semáforo esté libre.
  • SET ^SEMAFORO=1: Establece el semáforo para indicar que el recurso está en uso.
  • WRITE: Escribe un mensaje indicando que el proceso está accediendo al recurso.
  • SET ^SEMAFORO=0: Libera el semáforo.

Ejercicio Práctico

Modifica el ejemplo anterior para que los procesos escriban un mensaje diferente cuando acceden al recurso.

; Solución del ejercicio
STARTSYNC
    SET ^SEMAFORO=0
    JOB ^PROCESS1
    JOB ^PROCESS2
    QUIT

PROCESS1
    FOR  DO  QUIT:^SEMAFORO=0
    . SET ^SEMAFORO=1
    . WRITE "Proceso 1 accediendo al recurso compartido", !
    . SET ^SEMAFORO=0
    QUIT

PROCESS2
    FOR  DO  QUIT:^SEMAFORO=0
    . SET ^SEMAFORO=1
    . WRITE "Proceso 2 accediendo al recurso compartido", !
    . SET ^SEMAFORO=0
    QUIT

  1. Procesamiento Paralelo con Subprocesos

Uso de Subprocesos

Los subprocesos permiten dividir una tarea en partes más pequeñas que se pueden ejecutar en paralelo. En MUMPS, esto se puede lograr mediante la creación de múltiples procesos que ejecutan diferentes partes de una tarea.

; Ejemplo de procesamiento paralelo con subprocesos
STARTPARALLEL
    JOB ^SUBTASK1
    JOB ^SUBTASK2
    QUIT

SUBTASK1
    FOR I=1:1:5 WRITE "Subtarea 1 - Iteración ", I, !
    QUIT

SUBTASK2
    FOR I=1:1:5 WRITE "Subtarea 2 - Iteración ", I, !
    QUIT

Explicación del Código

  • STARTPARALLEL: Inicia dos subprocesos paralelos.
  • SUBTASK1 y SUBTASK2: Son las subrutinas que se ejecutan en paralelo, cada una escribiendo un mensaje en la pantalla en un bucle.

Ejercicio Práctico

Crea una rutina que divida una lista de números en dos sublistas y calcule la suma de cada sublista en paralelo.

; Solución del ejercicio
STARTSUM
    SET ^NUMS(1)=1,^NUMS(2)=2,^NUMS(3)=3,^NUMS(4)=4,^NUMS(5)=5,^NUMS(6)=6
    JOB ^SUM1
    JOB ^SUM2
    QUIT

SUM1
    SET SUM=0
    FOR I=1:1:3 SET SUM=SUM+^NUMS(I)
    WRITE "Suma de la primera sublista: ", SUM, !
    QUIT

SUM2
    SET SUM=0
    FOR I=4:1:6 SET SUM=SUM+^NUMS(I)
    WRITE "Suma de la segunda sublista: ", SUM, !
    QUIT

Conclusión

En esta sección, hemos aprendido sobre la concurrencia y el procesamiento paralelo en MUMPS. Hemos visto cómo crear y sincronizar procesos, así como cómo dividir tareas en subprocesos para mejorar el rendimiento. Estos conceptos son fundamentales para desarrollar aplicaciones eficientes y escalables en MUMPS.

En el próximo módulo, exploraremos estructuras de datos avanzadas, lo que nos permitirá manejar datos de manera más eficiente y efectiva.

© Copyright 2024. Todos los derechos reservados