Při porovnání synchronních a asynchronních politik Polly v MVVMCrossu nebo jakékoli aplikaci .NET přichází do hry několik rozdílů a úvah o výkonu:
Synchronní zásady
1. Blokování povahy: Synchronní politiky blokují, což znamená, že provádějí úkoly postupně a čekají, až každý úkol dokončí, než se přesune na další. To může vést k pomalejšímu výkonu ve scénářích zahrnujících I/O operace nebo dlouhodobé úkoly, protože vlákno je svázáno a čeká na dokončení operace [4] [6].
2. Využití zdrojů: Synchronní programování obvykle vede k vyššímu využití zdrojů, protože vlákna jsou držena ve stavu čekání, spotřebovávají paměť a potenciálně vede k vyčerpání fondu vláken, pokud nebude správně zvládnuto [4] [2].
3. škálovatelnost: Synchronní přístupy jsou méně škálovatelné ve srovnání s asynchronními, zejména v prostředích vyžadujících vysokou souběžnost. Mohou se stát úzkými místy v systémech, které zpracovávají více požadavků současně [4].
Asynchronní politiky
1.. Neblokovací příroda: Asynchronní politiky jsou neblokovací, což umožňuje úkoly samostatně běžet bez vázání vláken. To zlepšuje citlivost a škálovatelnost, zejména ve scénářích zahrnujících I/O operace nebo síťové požadavky [4] [3].
2. Účinnost zdrojů: Asynchronní programování optimalizuje přidělování zdrojů uvolněním vláken zpět do fondu při čekání na dokončení operací, snížením využití paměti a zlepšením využití CPU [4] [2].
3. škálovatelnost a propustnost: Asynchronní politiky jsou vysoce škálovatelné a mohou efektivně zvládnout velké množství souběžných požadavků. Jsou zvláště výhodné v aplikacích v reálném světě, kde je nepředvídatelnost a nerovnoměrné rozdělení pracovního zatížení [2] [4].
Porovnání výkonu
- Propustnost a škálovatelnost: Asynchronní politiky obecně nabízejí lepší propustnost a škálovatelnost ve srovnání se synchronními, zejména ve scénářích s nepředvídatelným pracovním zátěží nebo požadavky na vysokou souběžnost [2] [4].
- Spotřeba zdrojů: Asynchronní politiky mají tendenci mít nižší paměťovou stopu a lepší využití CPU ve srovnání se synchronními, což může vést k významným výhodám v prostředí omezených na zdroje [2] [4].
-Úvahy režie: Zatímco asynchronní kód může zavést další režii kvůli přepínání kontextu a správě úkolů, tato režie je často vyvážena výhodami neblokujícího provádění a efektivního využití zdrojů ve scénářích I/O [6] [2].
Polly Specifics
Polly podporuje jak synchronní, tak asynchronní politiky a poskytují metody jako „Execute“ pro synchronní operace a `ExecuteASync` pro asynchronní [3]. Při použití Polly v MVVMCross nebo podobných rámcích závisí výběr mezi synchronními a asynchronními politikami na specifických požadavcích vaší aplikace, jako je to, zda zahrnuje I/O operace nebo potřebuje zvládnout vysoký objem souběžných požadavků.
Stručně řečeno, asynchronní politiky Polly obecně nabízejí vynikající výkon a škálovatelnost ve srovnání se synchronními, zejména ve scénářích zahrnujících I/O operace nebo vysokou souběžnost. Synchronní politiky však mohou být stále vhodné pro jednoduché, sekvenční úkoly, kde je předvídatelnost a přímá provádění důležitější než škálovatelnost.
Citace:[1] http://www.thepollyproject.org/2019/02/13/custom-policies-for-all-execution-types-custom-policies-part-iv/
[2] https://stackoverflow.com/questions/55823184/DOES-Synchronous-model-really-give-benefits-in-Throughput--Against-Properly-Conf
[3] https://www.nuget.org/packages/polly/7.2.4
[4] https://kissflow.com/application-development/asynchronous-vs-synchronous-rogramming/
[5] https://stackoverflow.com/questions/59456197/using-polly-for-re-retry-atempt-from-an-async-fúze
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2011/october/asynchronous-rogramming-sync-Performance-instanding-the-costs-of-async-andaatait
[7] https://github.com/app-vnext/polly/issues/281
[8] https://github.com/quozd/awesome-dotnet