Κατά τη σύγκριση των σύγχρονων και ασύγχρονων πολιτικών Polly στο MVVMCROSS ή οποιαδήποτε εφαρμογή .NET, πολλές διαφορές απόδοσης και οι εκτιμήσεις έρχονται σε παιχνίδι:
σύγχρονες πολιτικές
1. Αποκλείοντας τη φύση: Οι σύγχρονες πολιτικές εμποδίζουν, πράγμα που σημαίνει ότι εκτελούν καθήκοντα διαδοχικά και περιμένουν να ολοκληρωθεί κάθε εργασία πριν προχωρήσει στο επόμενο. Αυτό μπορεί να οδηγήσει σε βραδύτερες επιδόσεις σε σενάρια που περιλαμβάνουν εργασίες I/O ή μακροχρόνιες εργασίες, καθώς το νήμα συνδέεται με την αναμονή της λειτουργίας [4] [6].
2. Χρήση πόρων: Ο σύγχρονος προγραμματισμός συνήθως έχει ως αποτέλεσμα υψηλότερη χρήση πόρων, επειδή τα νήματα κρατούνται σε κατάσταση αναμονής, καταναλώνοντας μνήμη και ενδεχομένως οδηγώντας σε εξάντληση της πισίνας εάν δεν διαχειρίζεται σωστά [4] [2].
3. Η επεκτασιμότητα: Οι σύγχρονες προσεγγίσεις είναι λιγότερο κλιμακωτές σε σύγκριση με τις ασύγχρονες, ειδικά σε περιβάλλοντα που απαιτούν υψηλή ταυτότητα. Μπορούν να γίνουν συμφόρηση σε συστήματα που χειρίζονται ταυτόχρονα πολλαπλά αιτήματα [4].
Ασύγχρονοι πολιτικές
1. Αυτό βελτιώνει την ανταπόκριση και την επεκτασιμότητα, ειδικά σε σενάρια που περιλαμβάνουν λειτουργίες I/O ή αιτήματα δικτύου [4] [3].
2. Αποδοτικότητα των πόρων: Ο ασύγχρονος προγραμματισμός βελτιστοποιεί την κατανομή των πόρων απελευθερώνοντας τα νήματα πίσω στην πισίνα ενώ περιμένουν να ολοκληρώσουν οι λειτουργίες, να μειώσουν τη χρήση της μνήμης και να βελτιώσουν τη χρήση της CPU [4] [2].
3. Η επεκτασιμότητα και η απόδοση: Οι ασύγχρονοι πολιτικές είναι εξαιρετικά κλιμακωτές και μπορούν να χειριστούν μεγάλο αριθμό ταυτόχρονα αιτήματα αποτελεσματικά. Είναι ιδιαίτερα επωφελείς σε εφαρμογές πραγματικού κόσμου, όπου είναι κοινή η απρόβλεπτη φόρτιση και η ανομοιόμορφη κατανομή [2] [4].
Σύγκριση απόδοσης
- Η διακίνηση και η επεκτασιμότητα: οι ασύγχρονοι πολιτικές γενικά προσφέρουν καλύτερη απόδοση και επεκτασιμότητα σε σύγκριση με τις σύγχρονες, ειδικά σε σενάρια με απρόβλεπτες φόρτους εργασίας ή υψηλές απαιτήσεις ταυτόχρονα [2] [4].
- Κατανάλωση πόρων: Οι ασύγχρονες πολιτικές τείνουν να έχουν χαμηλότερο αποτύπωμα μνήμης και καλύτερη χρήση της CPU σε σύγκριση με τα σύγχρονα, τα οποία μπορούν να οδηγήσουν σε σημαντικά πλεονεκτήματα απόδοσης σε περιβάλλοντα περιορισμένου πόρων [2] [4].
-Εξαιρετικές εκτιμήσεις: Ενώ ο ασύγχρονος κώδικας μπορεί να εισαγάγει πρόσθετα γενικά έξοδα λόγω της μεταγωγής και της διαχείρισης των εργασιών, τα γενικά έξοδα συχνά αντισταθμίζονται από τα οφέλη της εκτέλεσης μη αποκλεισμού και της αποτελεσματικής χρήσης των πόρων σε σενάρια I/O [6] [2].
polly specifics
Η Polly υποστηρίζει τόσο τις σύγχρονες όσο και τις ασύγχρονες πολιτικές, παρέχοντας μεθόδους όπως το «execute» για σύγχρονες λειτουργίες και το `executeasync 'για ασύγχρονες [3]. Όταν χρησιμοποιείτε την Polly σε MVVMCROSS ή παρόμοια πλαίσια, η επιλογή μεταξύ σύγχρονων και ασύγχρονων πολιτικών εξαρτάται από τις συγκεκριμένες απαιτήσεις της εφαρμογής σας, όπως το αν περιλαμβάνει λειτουργίες I/O ή πρέπει να χειριστεί έναν μεγάλο όγκο ταυτόχρονων αιτημάτων.
Συνοπτικά, οι ασύγχρονες πολιτικές Polly προσφέρουν γενικά ανώτερες επιδόσεις και επεκτασιμότητα σε σύγκριση με τις σύγχρονες, ειδικά σε σενάρια που περιλαμβάνουν επιχειρήσεις I/O ή υψηλής ταύδας. Ωστόσο, οι σύγχρονες πολιτικές ενδέχεται να είναι κατάλληλες για απλές, διαδοχικές εργασίες, όπου η προβλεψιμότητα και η απλή εκτέλεση είναι πιο σημαντικές από την επεκτασιμότητα.
Αναφορές:[1] http://www.thepollyproject.org/2019/02/13/custom-policies-for-all-exution-types-custom-policies-part-iv/
[2] https://stackoverflow.com/questions/55823184/does-asynchronous-model-really-five-benefits-in- throughput-gainst-prowerly-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-ffunction
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2011/october/asynchronous-programming-async-performance-understing-the-costs-of-async-and-await
[7] https://github.com/app-vnext/polly/issues/281
[8] https://github.com/quozd/awesome-dotnet