Atunci când comparați politicile Polly sincrone și asincrone în MVVMcross sau orice aplicație .NET, mai multe diferențe de performanță și considerente intră în joc:
Politici sincrone
1. Blocarea naturii: politicile sincrone se blochează, ceea ce înseamnă că execută sarcini secvențial și așteaptă ca fiecare sarcină să fie finalizată înainte de a trece la următoarea. Acest lucru poate duce la o performanță mai lentă în scenarii care implică operațiuni de I/O sau sarcini de lungă durată, deoarece firul este legat în așteptarea operației pentru a termina [4] [6].
2. Utilizarea resurselor: Programarea sincronă are ca rezultat de obicei o utilizare mai mare a resurselor, deoarece firele sunt ținute într -o stare de așteptare, consumând memorie și, ceea ce poate duce la epuizarea pool -ului, dacă nu este gestionată corect [4] [2].
3. Scalabilitate: Abordările sincrone sunt mai puțin scalabile în comparație cu cele asincrone, în special în mediile care necesită concurență ridicată. Acestea pot deveni blocaje în sisteme care gestionează mai multe solicitări simultan [4].
Politici asincrone
1.. Natură care nu blochează: Politicile asincrone nu sunt blocante, permițând sarcinilor să funcționeze independent fără a lega firele. Acest lucru îmbunătățește receptivitatea și scalabilitatea, în special în scenarii care implică operațiuni de I/O sau solicitări de rețea [4] [3].
2. Eficiența resurselor: Programarea asincronă optimizează alocarea resurselor prin eliberarea firelor înapoi în pool, în așteptarea finalizării operațiunilor, reducând utilizarea memoriei și îmbunătățind utilizarea CPU [4] [2].
3. Scalabilitate și debit: Politicile asincrone sunt extrem de scalabile și pot gestiona în mod eficient un număr mare de solicitări concomitente. Acestea sunt deosebit de benefice în aplicațiile din lumea reală, unde imprevizibilitatea sarcinii de muncă și distribuția inegală sunt comune [2] [4].
Comparație de performanță
- debit și scalabilitate: politicile asincrone oferă, în general, un randament și o scalabilitate mai bune în comparație cu cele sincrone, în special în scenarii cu sarcini de muncă imprevizibile sau cerințe de concurență ridicată [2] [4].
- Consumul de resurse: politicile asincrone tind să aibă o amprentă de memorie mai mică și o mai bună utilizare a procesorului în comparație cu cele sincrone, ceea ce poate duce la avantaje semnificative ale performanței în mediile constrânse de resurse [2] [4].
-Considerații aeriene: În timp ce codul asincron poate introduce cheltuielile generale suplimentare datorită comutării contextului și gestionării sarcinilor, acest aer este adesea depășit de beneficiile executării non-blocante și de utilizarea eficientă a resurselor în scenarii legate de I/O [6] [2].
Specificații Polly
Polly acceptă atât politici sincrone, cât și asincrone, oferind metode precum „Execute` pentru operațiuni sincrone și„ Execteasync` pentru cele asincrone [3]. Atunci când utilizați Polly în MVVMcross sau cadre similare, alegerea dintre politicile sincrone și asincrone depinde de cerințele specifice ale aplicației dvs., cum ar fi dacă implică operațiuni de I/O sau trebuie să gestioneze un volum mare de solicitări concomitente.
În rezumat, politicile Polly asincrone oferă, în general, performanțe și scalabilitate superioare în comparație cu cele sincrone, în special în scenarii care implică operații de I/O sau concurență ridicată. Cu toate acestea, politicile sincrone pot fi încă potrivite pentru sarcini simple, secvențiale, în care predictibilitatea și execuția simplă sunt mai importante decât scalabilitatea.
Citări:[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-benfits-in-hroughput-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-attempt-from-an-async-funcție
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2011/october/asynchronous-programming-async-performance-understanding-the-costs-of-async-and-await
[7] https://github.com/app-vnext/polly/issues/281
[8] https://github.com/quozd/awesome-dotnet