Python: Manejo del paralelismo y concurrencia. Manejo de la programación paralela y sus principales mecanismos
Enviado por Steven Rojas Guerrero • 27 de Julio de 2024 • Trabajo • 2.738 Palabras (11 Páginas) • 67 Visitas
[pic 1]
UNIVERSIDAD AGRARIA DEL ECUADOR
CARRERA DE INGENIERÍA EN CIENCIAS DE LA COMPUTACIÓN
ASIGNATURA:
Sistema Operativos Distribuidos
Tema:
Python: Manejo del paralelismo y concurrencia. Manejo de la programación paralela y sus principales mecanismos.
AUTOR:
VELEZ RAPPEL WALTER ANDRES
ERIKA MARIELA CONTRERAS VILLAMAR
CHALEN AGUIRRE PEDRO ALEXANDER
JAYRON JOSUE SUAREZ PAREJA
DOCENTE:
Ing. Jorge Hidalgo
PERIODO:
2024-2025
GUAYAQUIL-ECUADOR
- Introducción
En el mundo de la programación moderna, el manejo del paralelismo y la concurrencia se ha convertido en una habilidad esencial para mejorar el rendimiento y la eficiencia de las aplicaciones. Python, conocido por su simplicidad y legibilidad, ofrece varias herramientas y bibliotecas para abordar estos conceptos.
El paralelismo se refiere a la ejecución simultánea de múltiples tareas o procesos en diferentes núcleos de una CPU o en múltiples CPUs. Es especialmente útil en aplicaciones que requieren cálculos intensivos que pueden ser descompuestos en tareas independientes. La concurrencia, por otro lado, se refiere a la capacidad de un sistema para gestionar múltiples tareas que pueden no necesariamente ejecutarse al mismo tiempo, pero que progresan de manera intercalada para aprovechar al máximo los recursos disponibles. Esta es una estrategia clave para aplicaciones que realizan muchas operaciones de entrada/salida (I/O).
Python ofrece varios mecanismos para implementar el paralelismo y la concurrencia, incluyendo el módulo threading para la gestión de hilos, multiprocessing para la creación de procesos independientes, y asyncio para la programación asíncrona. Cada uno de estos módulos tiene sus propias características y ventajas, permitiendo a los desarrolladores elegir la mejor herramienta para sus necesidades específicas.
A lo largo de este proyecto, se destacará la importancia de comprender y aplicar adecuadamente técnicas de programación paralela y concurrente en Python, aprovechando su flexibilidad y las herramientas disponibles para mejorar el rendimiento y resolver problemas de manera eficiente en entornos computacionales complejos y distribuidos.
- Objetivo General
- Mejorar el rendimiento y la eficiencia de las aplicaciones mediante la ejecución simultánea o intercalada de múltiples tareas. Esto implica capacitar a los desarrolladores para utilizar estrategias y herramientas adecuadas que permitan maximizar el uso de los recursos del sistema, reducir el tiempo de procesamiento y mejorar la capacidad de respuesta de las aplicaciones, especialmente en entornos con múltiples operaciones de entrada/salida y tareas intensivas en cálculo.
- Objetivos Específicos sobre el Manejo del Paralelismo y Concurrencia
- Comprender la diferencia entre paralelismo y concurrencia.
- Determinar con los términos y conceptos clave, como hilos, procesos, corutinas, y el Global Interpreter Lock (GIL).
- Identificar cuándo utilizar threading para tareas de I/O.
- Reconocer situaciones en las que multiprocessing es más adecuado para tareas intensivas en CPU.
- Aplicar asyncio para manejar eficientemente operaciones asíncronas de entrada/salida.
- Crear y gestionar hilos utilizando el módulo threading.
- Implementar procesos paralelos con el módulo multiprocessing.
- Desarrollar aplicaciones asíncronas utilizando el módulo asyncio.
- Maximizar el uso de los núcleos de CPU disponibles mediante el paralelismo.
- Reducir el tiempo de espera en operaciones de entrada/salida utilizando concurrencia y programación asíncrona.
- Implementar mecanismos de sincronización como semáforos, bloqueos (locks) y barreras.
- Evitar y resolver problemas comunes como condiciones de carrera y bloqueos mutuos (deadlocks).
- Evaluar el impacto del paralelismo y la concurrencia en el rendimiento de la aplicación.
- Utilizar herramientas de perfilado y benchmarking para identificar cuellos de botella y áreas de mejora.
- Diseñar arquitecturas de software que escalen eficientemente con el aumento de la carga de trabajo.
- Garantizar que las aplicaciones mantengan una alta capacidad de respuesta bajo condiciones de alta concurrencia.
- Redactar pruebas unitarias y de integración que validen el comportamiento concurrente.
- Implementar estrategias de manejo de errores y excepciones específicas para entornos concurrentes y paralelos.
3.1. Comprender la diferencia entre paralelismo y concurrencia.
En Python, el manejo del paralelismo y la concurrencia es crucial para mejorar el rendimiento y la eficiencia de las aplicaciones, especialmente aquellas que requieren realizar múltiples tareas de manera simultánea o gestionar varias operaciones de entrada/salida (I/O). A continuación, se definen ambos conceptos y se describen las herramientas disponibles en Python para su implementación.
Dentro del proceso de planeación de un sistema de información, es necesario hacer una estimación de cuántos usuarios finales van a hacer uso del sistema y qué tanta carga puede ejercer sobre este. Lo anterior se conoce como la concurrencia de usuarios y define la capacidad máxima de consultas en simultáneo que es capaz de responder el sistema de información. La concurrencia también sucede cuando dos o más actividades separadas ocurren de manera simultánea; es decir, cuando un único sistema computacional ejecuta múltiples actividades en paralelo. Los procesos computacionales para extraer información de grandes volúmenes de datos, a pesar de los avances en las tecnologías de la información, tienen un alto costo tanto en tiempo como en uso de recursos físicos (Torres, 2019, pág. 38).
El manejo del paralelismo y la concurrencia en Python es fundamental para optimizar el rendimiento y la eficiencia de las aplicaciones, especialmente aquellas con múltiples tareas simultáneas o intensivas en operaciones de entrada/salida. Durante la planificación de un sistema de información, es esencial estimar el número de usuarios concurrentes y la carga que estos impondrán al sistema, determinando así su capacidad máxima de respuesta. La concurrencia se refiere a la ejecución simultánea de múltiples actividades en un único sistema, lo cual es crucial para gestionar grandes volúmenes de datos, aunque tenga un alto costo en términos de tiempo y recursos físicos.
...