Threading
En el contexto de computación, los hilos (threads) son secuencias mínimas de instrucciones que se pueden manejar independientemente por un scheduler (programador de turnos).
Los “shedulers” son un componente de la arquitectura de las computadoras que busca eficientar el manejo de recursos mediante la administración de los ciclos de reloj del CPU y la asignación de turnos para ejecución.
Las implementaciones de los hilos dependen del sistema operativo, lo que muestra que hay diferentes formas de organizar la ejecución de instrucciones, cada una con sus particularidades.
Multithread
Es la habilidad del CPU para manejar múltiples hilos (threads) de forma concurrente.
En un entorno de ejecución “multrithread” todos los hilos comparten recursos, en la practica lo que se utiliza es el acceso a variables en memoria, lo que implica considerar un diseño especial de la lógica de negocio para evitar problemas conocidos como “race condition”.
Process
Un proceso es una unidad de recursos. Los recursos que se agrupan son memoria (para código y datos), manejadores de archivos (file descriptors), sockets, manejadores de dispositivos y control de bloqueo de procesos.
Multiprocessing
Es la habilidad del CPU para manejar múltiples procesos de forma independiente.
Normalmente en el contexto de python, cuando hablamos de multiprocesos lo que buscamos es distribuir un problema computacional en diferentes procesos independientes para hacer más rápida su ejecución.
Diferencia entre Asincronismo, Concurrencia y Paralelismo
Asincronismo
En términos de computación, es una estrategia de programación que se usa para manejar potenciales “tareas de larga duración” sin bloquear el hilo principal de ejecución, para poder seguir respondiendo a eventos aún cuando la “tarea de larga duración” no haya terminado, logrando asi, una mayor eficiencia de recursos.
Concurrencia
En términos de computación, es la habilidad de los lenguajes de programación para poder “manejar” múltiples tareas al mismo tiempo; a diferencia del paralelismo que literal es “ejecutar” tareas al mismo tiempo. En términos más técnicos, la concurrencia se refiere a descomponer un programa en unidades de código que independientemente del orden de ejecución no se afecta el resultado final.