Palyginus sinchroninę ir asinchroninę „Polly“ politiką MVVMCross ar bet kurioje .NET programoje, atsiranda keli atlikimo skirtumai ir svarstymai:
Sinchroninė politika
1. Gamtos blokavimas: Sinchroninė politika blokuoja, tai reiškia, kad jos vykdo užduotis nuosekliai ir laukia, kol kiekviena užduotis bus atlikta prieš pereidami prie kitos. Tai gali lemti lėtesnį scenarijų, susijusių su I/O operacijomis ar ilgalaikėmis užduotimis, našumas, nes gija yra surišta laukiant, kol operacija baigsis [4] [6].
2. Išteklių panaudojimas: Sinchroninis programavimas paprastai lemia didesnį išteklių naudojimą, nes gijos laikomos laukiamos būsenoje, sunaudojant atmintį ir gali sukelti sriegių baseino išsekimą, jei jie nėra tinkamai valdomi [4] [2].
3. Mastelio keitimas: sinchroniniai metodai yra mažiau keičiami, palyginti su asinchroniniais, ypač tokiose aplinkose, kuriose reikia didelio suderinamumo. Jie gali tapti kliūtimis sistemose, tvarkančiose keliomis užklausomis vienu metu [4].
Asinchroninė politika
1. Neužsiblokuojantis pobūdis: Asinchroninė politika yra neužblokuojama, leidžianti užduotis atlikti savarankiškai, nesiejant siūlų. Tai pagerina reagavimą ir mastelį, ypač scenarijuose, susijusiuose su I/O operacijomis ar tinklo užklausomis [4] [3].
2. Šaltinių efektyvumas: asinchroninis programavimas optimizuoja išteklių paskirstymą, išleisdamas gijas prie baseino, laukiant, kol bus baigta operacija, sumažinant atminties naudojimą ir pagerinant CPU panaudojimą [4] [2].
3. Mastelio keitimas ir pralaidumas: Asinchroninė politika yra labai keičiama ir gali efektyviai tvarkyti daugybę vienalaikių užklausų. Jie yra ypač naudingi realiame pasaulyje, kai įprasta darbo krūvio nenuspėjamumas ir netolygus pasiskirstymas [2] [4].
našumo palyginimas
- pralaidumas ir mastelio keitimas: Asinchroninė politika paprastai siūlo geresnį pralaidumą ir mastelio keitimą, palyginti su sinchroninėmis, ypač scenarijuose, kuriuose yra nenuspėjami darbo krūviai ar aukštos suderinamumo reikalavimai [2] [4].
- Šaltinių suvartojimas: Asinchroninė politika paprastai turi mažesnį atminties pėdsaką ir geresnį procesoriaus panaudojimą, palyginti su sinchroninėmis, o tai gali sukelti reikšmingų pranašumų išteklių suvaržytoje aplinkoje [2] [4].
-Priežiūros sumetimai: Nors asinchroninis kodas gali įvesti papildomas pridėtines išlaidas dėl konteksto perjungimo ir užduočių valdymo, šią pridėtinę vertę dažnai nusveria neužblokavimo vykdymo ir efektyvaus išteklių panaudojimo pranašumai, susiję su I/O sujungtais scenarijais [6] [2].
POLLY specifika
Polly palaiko tiek sinchroninę, tiek asinchroninę politiką, teikdama tokius metodus kaip „vykdyti“ sinchroninės operacijos ir „executeasync“ asinchroniniams [3]. Kai „Polly“ naudoja „MvVMCross“ ar panašiuose sistemose, pasirinkimas tarp sinchroninės ir asinchroninės politikos priklauso nuo konkrečių jūsų programos reikalavimų, pavyzdžiui, ar tai susiję su I/O operacijomis, ar reikia tvarkyti didelę lygiagrečių užklausų kiekį.
Apibendrinant galima pasakyti, kad asinchroninė Polly politika paprastai siūlo puikų našumą ir mastelį, palyginti su sinchroninėmis, ypač scenarijais, susijusiais su I/O operacijomis ar didele suderinamumu. Tačiau sinchroninė politika vis dar gali būti tinkama paprastoms, nuoseklioms užduotims, kai nuspėjamumas ir tiesus vykdymas yra svarbesni nei mastelio keitimas.
Citatos:[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-asynchronous-model-really-give-benefits-in-throughput-against-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-ttempt-from-an-async-function
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2011/october/asynchronous-programming-async-performance-sunde-the-fosts-of-async-and-await
[7] https://github.com/app-vnext/polly/issues/281
[8] https://github.com/quozd/awesome-dotnet