Python es un multiprogramador y multiprocesador de tareas que nos permite crear códigos más eficientes pero también con un menor tiempo de ejecución, lo cual podemos conseguir intercalando las tareas (simultáneamente) o en paralelo.
CONCURRENCIA
Es la capacidad de un programa con un mínimo de dos subprocesos que ejecuta múltiples tareas al mismo tiempo en el mismo sistema informático (disco, red o un solo núcleo de CPU) de manera superpuesta. Esto quiere decirnos, por ejemplo, si tenemos un único núcleo de CPU y se empieza por ejecutar la tarea A, luego si se terminase con la tarea A recién se empieza a trabajar en la B. Además nos permite regresar a anteriores tareas para terminarla.
Figura 01. Dos procesos (A y B) para un único núcleo CPU
HERRAMIENTAS
1. Hilos:
Flujo de instrucciones ordenadas que se ejecutan como parte de un proceso. Los subprocesos funcionan como identificadores y son la unidad de ejecución menor. Los subprocesos puedes interactuar con recursos compartidos y la comunicación es posible entre múltiples subprocesos.
Un riesgo en esta secuencia es cuando dos subprocesos comienzan a compartir memoria que podría afectar el orden de ejecución, dar valores incorrectos o bloquear el sistema por completo.
Para aplicar, primero importamos la librería threading, creamos una función, ejecutamos y esperar a que terminen los hilos.
PARALELISMO
Es la capacidad de un programa de ejecutar procesos simultáneamente usando múltiples unidades de procesamiento (procesador multinúcleo o con múltiples CPU), con el objetivo de reducir el tiempo de ejecución y maximiza el uso de los hardwares.
Figura 02. Dos procesos (A y B) cada uno con un respectivo núcleo CPU y en paralelo
HERRAMIENTAS
1. Multiproceso:
Es un procesador que puede ejecutar múltiples subprocesos simultáneamente. Con ello podremos trabajar en varias cosas y en diferentes momentos, además de que son livianos en cuanto a la memoria en comparación con los procesos.
Como resumen, la siguiente tabla señala sus formas de ejecución, ventajas, desventajas e implementación:
Concurrencia | Paralelismo | |
---|---|---|
Ejecución |
Las tareas pueden intercalarse o ejecutarse en intervalos de tiempo solapados. |
Las tareas se ejecutan simultáneamente en procesadores o núcleos separados. |
Ventajas |
Permite a los programas avanzar en múltiples tareas incluso cuando algunas de ellas están bloqueadas. |
Mejora el rendimiento general del programa al distribuir las tareas entre varios procesadores o núcleos. |
Desventajas |
El número de núcleos disponibles y la potencia de procesamiento del sistema son limitados. |
La cantidad de memoria disponible y la sobrecarga de comunicación entre procesadores o núcleos son limitadas. |
Implementación |
Puede implementarse utilizando hilos, corrutinas o programación asíncrona. |
Puede implementarse mediante multiprocesamiento, multithilos o computación distribuida. |
Conoce más sobre las herramientas de hilos y procesos en la programación:
REFERENCIAS:
Palach, J. (2014). Parallel Programming with Python. Packt Publishing.
Forbes, E. (2017). Learning concurrency in Python. Packt Publishing.
Comentarios
Registrate o Inicia Sesión para comentar y obtener Cursos de pago gratis