Ao comparar políticas policiais síncronas e assíncronas em MVVMcross, ou qualquer aplicativo .NET, várias diferenças e considerações de desempenho entram em jogo:
Políticas síncronas
1. Natureza de bloqueio: As políticas síncronas estão bloqueando, o que significa que eles executam tarefas sequencialmente e aguardam que cada tarefa seja concluída antes de passar para a próxima. Isso pode levar a um desempenho mais lento em cenários envolvendo operações de E/S ou tarefas de longa duração, pois o thread está amarrado esperando a operação terminar [4] [6].
2. Utilização de recursos: A programação síncrona geralmente resulta em maior uso de recursos, porque os threads são mantidos em um estado de espera, consumindo memória e potencialmente levando à exaustão do pool de threads, se não for gerenciado corretamente [4] [2].
3. Escalabilidade: As abordagens síncronas são menos escaláveis em comparação com as assíncronas, especialmente em ambientes que exigem alta simultaneidade. Eles podem se tornar gargalos em sistemas que lidam com várias solicitações simultaneamente [4].
Políticas assíncronas
1. Natureza não bloqueadora: As políticas assíncronas não são bloqueadoras, permitindo que as tarefas funcionem de forma independente sem amarrar threads. Isso melhora a capacidade de resposta e escalabilidade, especialmente em cenários envolvendo operações de E/S ou solicitações de rede [4] [3].
2. Eficiência de recursos: A programação assíncrona otimiza a alocação de recursos liberando threads de volta ao pool enquanto aguardam as operações concluindo, reduzindo o uso da memória e melhorando a utilização da CPU [4] [2].
3. Escalabilidade e taxa de transferência: As políticas assíncronas são altamente escaláveis e podem lidar com um grande número de solicitações simultâneas com eficiência. Eles são particularmente benéficos em aplicações do mundo real, onde a imprevisibilidade da carga de trabalho e a distribuição desigual são comuns [2] [4].
Comparação de desempenho ###
- Taxa de transferência e escalabilidade: as políticas assíncronas geralmente oferecem melhor taxa de transferência e escalabilidade em comparação com as síncronas, especialmente em cenários com cargas de trabalho imprevisíveis ou requisitos de alta concorrência [2] [4].
- Consumo de recursos: as políticas assíncronas tendem a ter uma pegada de memória mais baixa e melhor utilização da CPU em comparação com as síncronas, o que pode levar a vantagens significativas de desempenho em ambientes restritos a recursos [2] [4].
-Considerações gerais: Embora o código assíncrono possa introduzir despesas gerais adicionais devido à comutação de contexto e ao gerenciamento de tarefas, essa sobrecarga é frequentemente superada pelos benefícios da execução não bloqueadora e da utilização eficiente de recursos em cenários de E/S ligados [6] [2].
Polly Especificamente
Polly suporta políticas síncronas e assíncronas, fornecendo métodos como `execute 'para operações síncronas e` execuneasync' para as assíncronas [3]. Ao usar o Polly em MVVMcross ou estruturas similares, a escolha entre políticas síncronas e assíncronas depende dos requisitos específicos do seu aplicativo, como se ela envolve operações de E/S ou precisa lidar com um alto volume de solicitações simultâneas.
Em resumo, as políticas policiais assíncronas geralmente oferecem desempenho e escalabilidade superiores em comparação com as síncronas, especialmente em cenários envolvendo operações de E/S ou alta concorrência. No entanto, as políticas síncronas ainda podem ser adequadas para tarefas simples e seqüenciais, onde a previsibilidade e a execução direta são mais importantes que a escalabilidade.
Citações:[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-asncronse-model-really-give-benefits-in-throughput-against-properly-Conf
[3] https://www.nuget.org/packages/polly/7.2.4
[4] https://kissflow.com/application-development/asynchrons-vs-synchrons-programming/
[5] https://stackoverflow.com/questions/59456197/using-polly-for--recry-attempt-from-an-async-função
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2011/october/asynchrons-programming-async-performance-prendominess-the-costs-of -ync-and-await
[7] https://github.com/app-vnext/polly/issues/281
[8] https://github.com/quozd/awesome-dotnet