-
Supposons que vous ayez 2 tâches, qui n'impliquent pas d'E/S (sur une machine multiprocesseur). Dans ce cas, les threads surclassent les Async. Parce qu'Async, comme un programme à thread unique, exécute vos tâches dans l'ordre. Mais les threads peuvent exécuter les deux tâches simultanément.
-
Supposons que vous ayez 2 tâches, qui impliquent de l'E/S (sur une machine multiprocesseur). Dans ce cas, à la fois Async et les threads offrent à peu près les mêmes performances (cela peut varier en fonction du nombre de cœurs, de l'ordonnancement, de l'intensité du traitement de la tâche, etc.). De plus, Async utilise moins de ressources, a moins de surcharge et est moins complexe à programmer qu'un programme multi-thread.
Comment cela fonctionne ? Le thread 1 exécute la tâche 1, comme il est en attente d'E/S, il est déplacé dans la file d'attente d'attente d'E/S. De même, le thread 2 exécute la tâche 2, comme elle implique également de l'E/S, elle est déplacée dans la file d'attente d'attente d'E/S. Dès que sa demande d'E/S est résolue, elle est déplacée dans la file d'attente prête afin que l'ordonnanceur puisse planifier le thread pour l'exécution.
Async exécute la tâche 1 et, sans attendre que son E/S soit terminée, il continue avec la tâche 2, puis il attend que l'E/S des deux tâches soit terminée. Il termine les tâches dans l'ordre de l'achèvement de l'E/S.
Async convient mieux pour les tâches impliquant des appels de services Web, des requêtes de base de données, etc., Les threads pour les tâches intensives en traitement.
La vidéo ci-dessous explique lemodèle Async vs Threaded
et aussi quand l'utiliser, etc., https://www.youtube.com/watch?v=kdzL3r-yJZY
J'espère que cela vous sera utile.