Dans le multitraitement, vous tirez parti de plusieurs processeurs pour distribuer vos calculs. Étant donné que chacun des processeurs fonctionne en parallèle, vous êtes effectivement en mesure d'exécuter plusieurs tâches simultanément. Vous souhaiterez utiliser le multitraitement pour les tâches liées au processeur . Un exemple serait d'essayer de calculer une somme de tous les éléments d'une énorme liste. Si votre machine a 8 cœurs, vous pouvez "couper" la liste en 8 listes plus petites et calculer la somme de chacune de ces listes séparément sur un noyau séparé, puis additionner simplement ces nombres. Vous obtiendrez une accélération d'environ 8x en faisant cela.
En filetagevous n'avez pas besoin de plusieurs processeurs. Imaginez un programme qui envoie de nombreuses requêtes HTTP sur le Web. Si vous utilisiez un programme à un seul thread, il arrêterait l'exécution (bloquer) à chaque demande, attendrait une réponse, puis continuerait une fois reçu une réponse. Le problème ici est que votre CPU ne fonctionne pas vraiment en attendant qu'un serveur externe fasse le travail; il aurait pu faire un travail utile entre-temps! Le correctif consiste à utiliser des threads - vous pouvez en créer beaucoup, chacun étant responsable de la demande de contenu sur le Web. La bonne chose à propos des threads est que, même s'ils fonctionnent sur un processeur, le processeur "gèle" de temps en temps l'exécution d'un thread et saute à l'exécution de l'autre (cela s'appelle la commutation de contexte et cela se produit constamment à non-déterministe. intervalles). - utilisez le filetage.
asyncio est essentiellement un threading où pas le CPU mais vous, en tant que programmeur (ou en fait votre application), décidez où et quand le changement de contexte se produit . En Python, vous utilisez un await
mot-clé pour suspendre l'exécution de votre coroutine (défini à l'aide du async
mot-clé).