-
Semáforo
Semáforo son una herramienta versátil en programación concurrente, proporcionando mecanismos efectivos para controlar el acceso a recursos compartidos y coordinar la ejecución de hilos, lo que contribuye a la escritura de programas concurrentes seguros y eficientes. Aquí tienes un ejemplo simple de cómo se pueden utilizar semáforos en Python, utilizando la biblioteca threading En este ejemplo, se crea un semáforo binario (sem) con un valor inicial de 1. La función incrementar representa una sección crítica donde se incrementa la variable contador. Antes de entrar en la sección crítica, se adquiere el semáforo (sem.acquire()), y después de salir de la sección crítica, se libera el semáforo (sem.release()). La operación acquire actúa…
-
Monitor
Los monitor son una herramienta valiosa en programación concurrente y han sido ampliamente adoptados en diversos contextos para gestionar la concurrencia de manera segura y eficiente. Suponga que se quiere implementar un contador que puede ser incrementado y decrementado por varios hilos simultáneamente, pero se debe asegurar de que estas operaciones sean atómicas y que siempre se respete la exclusión mutua. Codificación Explicación En este ejemplo, la clase MonitorContador encapsula el contador y los métodos (incrementar, decrementar, obtener_valor) que operan sobre él. Se utiliza un cerrojo (mutex) para garantizar la exclusión mutua alrededor de las operaciones críticas. Los dos hilos (hilo_aumentar y hilo_disminuir) realizan incrementos y decrementos en paralelo, pero…
-
Exclusión, sincronización y región
La programación concurrente, esencial en entornos de desarrollo modernos, involucra la ejecución simultánea de múltiples hilos o procesos para mejorar la eficiencia y la capacidad de respuesta de un programa. Conceptos clave como la exclusión mutua, las regiones críticas y la sincronización juegan un papel fundamental. La exclusión mutua asegura que solo un hilo acceda a un recurso compartido en un momento dado, evitando así condiciones de carrera y garantizando la coherencia de los datos. Las regiones críticas, por su parte, son secciones de código donde se accede y modifica información compartida, y se implementan para garantizar que estas operaciones críticas se realicen de manera atómica, sin interferencia de otros…
-
Hilos
Ejercicios Codificación Solución 1: Contador Concurrente en Python Explicación Solución 2: Imprimir en Orden en Python Explicación Solución 3: Problema de Productor-Consumidor en Python Explicación
-
Programación Concurrente
A continuación se describe seis ejercicios sencillos que abordan los temas de introducción a la programación concurrente, conceptos de programación concurrente, arquitecturas paralelas y distribuidas, así como algoritmos paralelos y distribuidos.
-
Granja de Renderizado para Animación
El renderizado, es un proceso que convierte modelos 3D en secuencias de imágenes, es intensivo en computación y puede llevar mucho tiempo. Para mejorar la eficiencia, decidieron implementar un sistema de procesamiento distribuido utilizando algoritmos paralelos y distribuidos. Imagine ahora una empresa de animación que produce películas y series animadas. Problema El tiempo de render para una sola escena es demasiado largo, y el estudio desea reducirlo para acelerar la producción. Solución Se implementa un sistema de procesamiento distribuido utilizando algoritmos paralelos y distribuidos para dividir la carga de trabajo y acelerar el tiempo del render Componentes del Sistema Implementación Beneficios Desafíos Los algoritmos paralelos y distribuidos pueden aplicarse en…
-
Arquitectura Paralela y distribuida
Para este ejercicio se debe de considerar la combinación de aspectos de ambas arquitectura un sistema de procesamiento de grandes conjuntos de datos utilizando paralelismo a nivel de tarea y distribución de carga en un entorno distribuido. En este caso, se considera una plataforma de redes sociales con millones de usuarios activos y un flujo constante de datos en tiempo real. El objetivo es procesar y analizar la actividad de los usuarios para proporcionar recomendaciones personalizadas, tendencias populares y mejorar la experiencia del usuario. Beneficios: Este caso de estudio se ilustra cómo la arquitectura paralela y distribuida es esencial para enfrentar los desafíos de procesar grandes cantidades de datos en…
-
La Ingeniería en Sistemas Computacionales y Diseño de Software
En el mundo actual altamente tecnológico, la ingeniería en sistemas computacionales y el diseño de software desempeñan un papel crucial en una amplia variedad de campos. Un ejemplo claro de esto es el sector de la salud, donde los profesionales de la ingeniería trabajan en colaboración con médicos y científicos para desarrollar sistemas de gestión de registros médicos electrónicos. Estos sistemas permiten a los profesionales de la salud acceder a la información de los pacientes de manera eficiente y segura, mejorando la atención médica y la toma de decisiones. En el ámbito de la educación, la ingeniería en sistemas computacionales también juega un papel importante. Los diseñadores de software educativo…
-
Procesando imágenes
Una de las características de la programación concurrente es que se puede realizar múltiples procesos al mismo tiempo. Para ello se describe un script escrito en python donde se procesan varias imágenes en las que se aplicará filtro de blanco y negro y serán guardado en otra ruta. Requerimientos Script Explicación Cada imagen se procesa en un hilo separado, lo que permite procesar varias imágenes al mismo tiempo sin tener que esperar a que una imagen termine de procesarse antes de comenzar con la siguiente. La cantidad de imágenes que puedes procesar simultáneamente depende en parte de la implementación específica de la biblioteca concurrente y de la capacidad de tu…
-
Sistema de Reservas en una Aerolínea
Una aerolínea, la implementación de un sistema de reservas puede beneficiarse significativamente de la programación concurrente. El proceso de gestionar las reservas de vuelos implica la interacción con múltiples usuarios que intentan reservar asientos simultáneamente, además de la necesidad de mantener actualizada la disponibilidad de asientos en tiempo real. Beneficios y Ventajas: Desventajas: Aplicación en la Vida Real: En la vida real, los sistemas de reservas de aerolíneas, como los utilizados por grandes compañías aéreas, implementan la programación concurrente para manejar la alta demanda y la concurrencia de múltiples usuarios que intentan reservar vuelos al mismo tiempo. La aplicación en línea de una aerolínea permite que numerosos usuarios busquen, seleccionen…