En el multiprocesamiento , aprovecha varias CPU para distribuir sus cálculos. Dado que cada una de las CPU se ejecuta en paralelo, puede ejecutar varias tareas simultáneamente. Querría utilizar multiprocesamiento para tareas vinculadas a la CPU . Un ejemplo sería intentar calcular la suma de todos los elementos de una lista enorme. Si su máquina tiene 8 núcleos, puede "cortar" la lista en 8 listas más pequeñas y calcular la suma de cada una de esas listas por separado en un núcleo separado y luego simplemente sumar esos números. Obtendrá una aceleración de ~ 8x al hacer eso.
En hilono necesita varias CPU. Imagine un programa que envía muchas solicitudes HTTP a la web. Si usó un programa de un solo subproceso, detendría la ejecución (bloque) en cada solicitud, esperaría una respuesta y luego continuaría una vez que se recibiera una respuesta. El problema aquí es que su CPU no está realmente funcionando mientras espera que algún servidor externo haga el trabajo; ¡podría haber hecho un trabajo útil mientras tanto! La solución es usar hilos: puede crear muchos de ellos, cada uno responsable de solicitar algún contenido de la web. Lo bueno de los subprocesos es que, incluso si se ejecutan en una CPU, la CPU de vez en cuando "congela" la ejecución de un subproceso y salta a la ejecución del otro (se llama cambio de contexto y ocurre constantemente en condiciones no deterministas intervalos). - utilizar enhebrado.
asyncio es esencialmente un subproceso donde no la CPU sino usted, como programador (o en realidad su aplicación), decide dónde y cuándo ocurre el cambio de contexto . En Python, usa una await
palabra clave para suspender la ejecución de su corrutina (definida usando una async
palabra clave).