Lorsque vous comparez les politiques Polly synchrones et asynchrones dans MVVMCross, ou toute application .NET, plusieurs différences de performances et considérations entrent en jeu:
Politiques synchrones
1. Bloquer la nature: les politiques synchrones bloquent, ce qui signifie qu'elles exécutent les tâches séquentiellement et attendent que chaque tâche se termine avant de passer à la suivante. Cela peut entraîner des performances plus lentes dans des scénarios impliquant des opérations d'E / S ou des tâches de longue durée, car le fil est attaché en attendant que l'opération se termine [4] [6].
2. Utilisation des ressources: la programmation synchrone entraîne généralement une utilisation plus élevée des ressources car les threads sont maintenus dans un état d'attente, consommant de la mémoire et conduisant potentiellement à l'épuisement du pool de thread s'ils ne sont pas gérés correctement [4] [2].
3. Évolutivité: les approches synchrones sont moins évolutives que les approches asynchrones, en particulier dans les environnements nécessitant une concurrence élevée. Ils peuvent devenir des goulots d'étranglement dans les systèmes gantant plusieurs demandes simultanément [4].
Politiques asynchrones
1. Nature non bloquant: les politiques asynchrones ne bloquent pas, permettant aux tâches de s'exécuter indépendamment sans lier les fils. Cela améliore la réactivité et l'évolutivité, en particulier dans les scénarios impliquant des opérations d'E / S ou des demandes de réseau [4] [3].
2.
3. Évolutivité et débit: les politiques asynchrones sont très évolutives et peuvent gérer efficacement un grand nombre de demandes simultanées. Ils sont particulièrement bénéfiques dans les applications du monde réel où l'imprévisibilité de la charge de travail et la distribution inégale sont courantes [2] [4].
Comparaison des performances
- Débit et évolutivité: les politiques asynchrones offrent généralement un meilleur débit et une meilleure évolutivité par rapport aux synchrones synchrones, en particulier dans les scénarios avec des charges de travail imprévisibles ou des exigences de concurrence élevées [2] [4].
- Consommation des ressources: les politiques asynchrones ont tendance à avoir une empreinte mémoire plus faible et une meilleure utilisation du processeur par rapport à celles synchrones, ce qui peut entraîner des avantages de performance significatifs dans des environnements limités aux ressources [2] [4].
- Considérations de frais généraux: Bien que le code asynchrone puisse introduire des frais généraux supplémentaires en raison de la commutation contextuelle et de la gestion des tâches, cette surcharge est souvent compensée par les avantages de l'exécution non bloquante et de l'utilisation efficace des ressources dans les scénarios liés aux E / S [6] [2].
Spécifications de Polly
Polly prend en charge les stratégies synchrones et asynchrones, fournissant des méthodes telles que «Execute» pour les opérations synchrones et «Exeseasync» pour les opérations asynchrones [3]. Lorsque vous utilisez Polly dans MVVMCross ou des cadres similaires, le choix entre les politiques synchrones et asynchrones dépend des exigences spécifiques de votre application, par exemple s'il implique des opérations d'E / S ou doit gérer un volume élevé de demandes simultanées.
En résumé, les politiques de Polly asynchrones offrent généralement des performances et une évolutivité supérieures par rapport à celles synchrones, en particulier dans les scénarios impliquant des opérations d'E / S ou une concurrence élevée. Cependant, les politiques synchrones peuvent toujours être adaptées à des tâches séquentielles simples où la prévisibilité et l'exécution simple sont plus importantes que l'évolutivité.
Citations:[1] http://www.thepollyproject.org/2019/02/13/custom-polices-for-all-execution-types-stustom-policies-part-iv/
[2] https://stackoverflow.com/questions/55823184/does-asynchronous-model-really-give-benefits-in-throughput-against-prperly-confit
[3] https://www.nuget.org/packages/polly/7.2.4
[4] https://kissflow.com/application-development/asynchronous-vs-ynchronous-programming/
[5] https://stackoverflow.com/questions/59456197/using-polly-for-a-retry-atempt-from-an-async-ction-function
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2011/octobre/asynchronous-programming-async-performance-indersting-the-costs-of-async-and-wawait
[7] https://github.com/app-vnext/polly/issues/281
[8] https://github.com/quozd/awesome-dotnet