Bij het vergelijken van synchrone en asynchrone Polly -beleid in MVVMCross, of een .NET -toepassing, spelen verschillende prestatieverschillen en overwegingen in het spel:
Synchrone beleid
1. Blokkerende aard: Synchrone beleid blokkeert, wat betekent dat ze taken achtereenvolgens uitvoeren en wachten tot elke taak wordt voltooid voordat u verder gaat naar de volgende. Dit kan leiden tot langzamere prestaties in scenario's met I/O-bewerkingen of langlopende taken, omdat de thread is vastgebonden, wachtend op de operatie om te voltooien [4] [6].
2.. Resource -gebruik: Synchrone programmering resulteert meestal in een hoger gebruik van hulpbronnen omdat threads in een wachtstatus worden gehouden, het geheugen consumeren en mogelijk leiden tot uitputting van de threadpool indien niet correct beheerd [4] [2].
3. Schaalbaarheid: synchrone benaderingen zijn minder schaalbaar in vergelijking met asynchrone, vooral in omgevingen die een hoge gelijktijdigheid vereisen. Ze kunnen knelpunten worden in systemen die meerdere verzoeken tegelijkertijd hanteren [4].
asynchrone beleid
1. Niet-blokkerende aard: asynchrone beleid is niet-blokkeren, waardoor taken onafhankelijk kunnen worden uitgevoerd zonder threads te binden. Dit verbetert de responsiviteit en schaalbaarheid, vooral in scenario's met I/O -bewerkingen of netwerkverzoeken [4] [3].
2. Resource -efficiëntie: asynchrone programmering optimaliseert de toewijzing van hulpbronnen door threads terug te brengen naar de pool tijdens het wachten op bewerkingen om het geheugengebruik te voltooien en het CPU -gebruik te verbeteren [4] [2].
3. Schaalbaarheid en doorvoer: asynchrone beleid is zeer schaalbaar en kan een groot aantal gelijktijdige verzoeken efficiënt verwerken. Ze zijn met name voordelig in real-world toepassingen waar onvoorspelbaarheid van werklast en ongelijke verdeling gebruikelijk zijn [2] [4].
Prestatievergelijking
- Doorvoer en schaalbaarheid: asynchrone beleid biedt over het algemeen een betere doorvoer en schaalbaarheid in vergelijking met synchrone, vooral in scenario's met onvoorspelbare werklast of hoge gelijktijdigheidseisen [2] [4].
- Resource Consumptie: asynchrone beleid heeft de neiging om een lagere geheugenvoetafdruk en een beter CPU-gebruik te hebben in vergelijking met synchrone, wat kan leiden tot significante prestatievoordelen in omgevingen met beperkte prestaties [2] [4].
-Overheadoverwegingen: hoewel asynchrone code extra overhead kan introduceren vanwege contextomschakeling en taakbeheer, wordt deze overhead vaak opweegt door de voordelen van niet-blokkerende uitvoering en efficiënt gebruik van middelen in i/o-gebonden scenario's [6] [2].
Polly -bijzonderheden
Polly ondersteunt zowel synchrone als asynchrone beleid en biedt methoden zoals `execute` voor synchrone bewerkingen en` executeasync` voor asynchrone [3]. Bij het gebruik van Polly in MVVMCross of soortgelijke kaders, hangt het kiezen tussen synchrone en asynchrone beleid af van de specifieke vereisten van uw toepassing, zoals of het I/O -bewerkingen omvat of een hoog volume van gelijktijdige verzoeken moet afhandelen.
Samenvattend biedt asynchrone Polly -beleid over het algemeen superieure prestaties en schaalbaarheid in vergelijking met synchrone, vooral in scenario's met I/O -bewerkingen of hoge gelijktijdigheid. Synchrone beleid kan echter nog steeds geschikt zijn voor eenvoudige, opeenvolgende taken waarbij voorspelbaarheid en eenvoudige uitvoering belangrijker zijn dan schaalbaarheid.
Citaten:[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-eigenlijk-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-function
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2011/october/asynchronous-programming-async-performance-uneging-thecsts-of-async-and-aitait
[7] https://github.com/app-vnext/polly/issues/281
[8] https://github.com/quozd/awesome-dotnet