ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Python: Manejo del paralelismo y concurrencia. Manejo de la programación paralela y sus principales mecanismos

Steven Rojas GuerreroTrabajo27 de Julio de 2024

2.738 Palabras (11 Páginas)113 Visitas

Página 1 de 11

[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

  1. 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.

  1. 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.
  1. 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.

A continuación, se definen ambos conceptos y se describen las herramientas disponibles en Python para su implementación.

3.1.1. Definición

3.1.1.1. Paralelismo

El paralelismo se refiere a la ejecución simultánea de múltiples procesos o hilos en diferentes núcleos de una CPU o en múltiples CPUs. Es ideal para tareas que pueden dividirse en sub-tareas independientes que se pueden ejecutar en paralelo, reduciendo así el tiempo total de ejecución.

3.1.1.2. Concurrencia

La concurrencia se refiere a la capacidad de un sistema para gestionar múltiples tareas al mismo tiempo. No necesariamente implica la ejecución simultánea, sino la capacidad de intercalar la ejecución de tareas para aprovechar el tiempo de espera y mejorar la eficiencia general del sistema.

3.2. Determinar los términos y conceptos clave, como hilos, procesos, corutinas, y el Global Interpreter Lock (GIL).

3.2.1. Hilos

Un hilo es una unidad ligera de ejecución dentro de un proceso. Pueden existir varios hilos dentro del mismo proceso y compartir el mismo espacio de memoria y recursos del sistema, por lo que los hilos de un proceso pueden comunicarse y compartir datos directamente accediendo a la memoria compartida, así como utilizando primitivas de sincronización como mutexes o semáforos, que se presentarán más adelante.

La creación y gestión de un proceso suele generar más sobrecarga que la creación y gestión de un hilo. Cada proceso requiere un espacio de memoria y recursos del sistema independientes, lo que implica una sobrecarga de cambio de contexto. Los hilos, al ser ligeros, tienen menos sobrecarga en términos de asignación de recursos y cambio de contexto. Por otra parte, los procesos ofrecen un mayor grado de aislamiento frente a errores (Fernández, 2023).

Un hilo es una unidad ligera de ejecución dentro de un proceso, que puede compartir memoria y recursos del sistema con otros hilos del mismo proceso, facilitando la comunicación y el intercambio de datos. La gestión de hilos es menos costosa en términos de recursos y cambio de contexto comparado con la gestión de procesos, los cuales requieren más sobrecarga debido a la necesidad de espacios de memoria independientes. Sin embargo, los procesos proporcionan un mayor aislamiento frente a errores.

3.2.2. Procesos

Un proceso es una instancia de un programa en ejecución. Es una entidad activa que incluye el código del programa, sus datos, un conjunto de recursos (como archivos abiertos y dispositivos) y su estado de ejecución, que es gestionado por el sistema operativo. Los procesos son fundamentales para la multitarea, permitiendo que varios programas se ejecuten simultáneamente en un sistema. Cuta (2020) Menciona: “En contraposición con proceso, en un sistema por lotes se habla de tareas. Una tarea requiere mucha menos estructura, típicamente basta con guardar la información relacionada con la contabilidad de los recursos empleados. Una tarea no es interrumpida en el transcurso de su ejecución” (pág. 5). Los procesos pueden ser tareas, flujos de control o hilos, dependiendo del contexto que se está aplicando. Estos pueden ser concurrentes en un sistema, para lo que se debe contar con los recursos necesarios para soportarla, siendo asignada por la CPU del procesador.

...

Descargar como (para miembros actualizados) txt (19 Kb) pdf (309 Kb) docx (375 Kb)
Leer 10 páginas más »
Disponible sólo en Clubensayos.com