Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ar yra kokių nors atlikimo skirtumų tarp sinchroninės ir asinchroninės Polly politikos naudojimo MVVMCross


Ar yra kokių nors atlikimo skirtumų tarp sinchroninės ir asinchroninės Polly politikos naudojimo MVVMCross


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