Pri porovnávaní synchrónnych a asynchrónnych politík Polly v MVVMCross alebo v akejkoľvek aplikácii .NET sa objaví niekoľko rozdielov a úvahy o výkonnosti:
Synchrónne politiky
1. Blokovanie Príroda: Synchrónne politiky blokujú, čo znamená, že vykonávajú postupy úlohy a čakajú na dokončenie každej úlohy pred presunutím na ďalšiu. To môže viesť k pomalšiemu výkonu v scenároch zahŕňajúcich I/O operácie alebo dlhodobé úlohy, pretože vlákno je zviazané a čaká na dokončenie operácie [4] [6].
2. Využívanie zdrojov: Synchrónne programovanie zvyčajne vedie k vyššiemu využitiu zdrojov, pretože vlákna sú držané v čakacom stave, konzumujú pamäť a potenciálne vedú k vyčerpaniu fondu vlákien, ak nie sú správne spravované [4] [2].
3. Škálovateľnosť: Synchrónne prístupy sú menej škálovateľné v porovnaní so asynchrónnymi prístupmi, najmä v prostrediach vyžadujúcich vysokú súbežnosť. Môžu sa stať prekážkami v systémoch, ktoré sa súčasne zaoberajú viacerými požiadavkami [4].
asynchrónne politiky
1. Neblokujúca povaha: Asynchrónne politiky nie sú blokujúce, čo umožňuje, aby úlohy bežali nezávisle bez zviazania vlákien. To zlepšuje citlivosť a škálovateľnosť, najmä v scenároch zahŕňajúcich I/O operácie alebo požiadavky na sieť [4] [3].
2. Efektívnosť zdrojov: Asynchrónne programovanie optimalizuje alokáciu zdrojov uvoľnením vlákien späť do fondu a čakanie na dokončenie operácií, znižovanie využitia pamäte a zlepšenie využívania CPU [4] [2].
3. Škálovateľnosť a priepustnosť: asynchrónne politiky sú vysoko škálovateľné a dokážu efektívne zvládnuť veľké množstvo súbežných požiadaviek. Sú obzvlášť prospešné v aplikáciách v reálnom svete, kde sú bežné nepredvídateľnosť pracovnej záťaže a nerovnomerné rozdelenie [2] [4].
Porovnanie výkonu
- Priepustnosť a škálovateľnosť: Asynchrónne politiky vo všeobecnosti ponúkajú lepšiu priepustnosť a škálovateľnosť v porovnaní so synchrónnymi, najmä v scenároch s nepredvídateľnými pracovnými zaťaženiami alebo požiadavkami na vysokú súbežnosť [2] [4].
- Spotreba zdrojov: Asynchrónne politiky majú tendenciu mať nižšiu pamäťovú stopu a lepšie využitie CPU v porovnaní so synchrónnymi politikami, čo môže viesť k významným výkonnostným výhodám v prostrediach obmedzených na zdroje [2] [4].
-Režijné úvahy: Zatiaľ čo asynchrónny kód môže zaviesť ďalšie režijné náklady v dôsledku prepínania kontextu a riadenia úloh, táto réžia je často vyvážená výhodami neohrabaného vykonávania a efektívneho využívania zdrojov v scenároch viazaných I/O [6] [2].
Polly špecifiká
Polly podporuje synchrónne aj asynchrónne politiky a poskytuje metódy ako „execute“ pre synchrónne operácie a „executeasync“ pre asynchrónne [3]. Pri použití Polly v MVVMCross alebo podobných rámcoch závisí výber medzi synchrónnymi a asynchrónnymi politikami od konkrétnych požiadaviek vašej aplikácie, ako napríklad to, či zahŕňa operácie I/O alebo potrebuje zvládnuť vysoký objem súčasných požiadaviek.
Stručne povedané, asynchrónne politiky Polly vo všeobecnosti ponúkajú vynikajúci výkon a škálovateľnosť v porovnaní so synchrónnymi, najmä v scenároch zahŕňajúcich I/O operácie alebo vysokú súbežnosť. Synchrónne politiky však môžu byť stále vhodné pre jednoduché, sekvenčné úlohy, kde sú predvídateľnosť a priame vykonávanie dôležitejšie ako škálovateľnosť.
Citácie:[1] http://www.thepollyproject.org/2019/02/13/custom-policies-for-all-All-execution-types-Custom-policelies-part-iv/
[2] https://stackoverflow.com/questions/55823184/does-asynchronous-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-programming/
[5] https://stackoverflow.com/questions/59456197/using-polly-for-a-retry-achteph-from-an-async-function
Https://learn.microsoft.com/en-us/archive/msdn-magazine/2011/october/asynchronous-programing-async-performance-understanding-the-costs-of-async-and-and-awaitait
[7] https://github.com/app-vnext/polly/issues/281
[8] https://github.com/quozd/awesome-dotnet