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는 동기 및 비동기 정책을 모두 지원하여 동기화 작업을위한 'Execute'와 같은 방법을 제공하고 비동기식을위한 'ExecuteSync'와 같은 방법을 제공합니다 [3]. MVVMCross 또는 이와 유사한 프레임 워크에서 Polly를 사용하는 경우 동기 및 비동기 정책을 선택하는 것은 응용 프로그램의 특정 요구 사항에 따라 I/O 운영과 관련이 있는지 또는 많은 양의 동시 요청을 처리 해야하는지에 따라 다릅니다.
요약하면, 비동기 폴리 정책은 일반적으로 동기성과 비교하여 우수한 성능과 확장 성을 제공합니다. 특히 I/O 운영 또는 높은 동시성과 관련된 시나리오에서. 그러나 동기 정책은 여전히 예측 가능성과 간단한 실행이 확장 성보다 더 중요한 간단하고 순차적 인 작업에 적합 할 수 있습니다.
인용 :[1] http://www.thepollyproject.org/2019/02/13/custom-policies-for-allecution-types-custom-policies-part-iv/
[2] https://stackoverflow.com/questions/55823184/does-asynchronous-model-really-give-benefits-in-throughput-against-proper-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-attemptemp-from-an-async-function
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2011/october/asynchronous-programming-async-performance-nunderstanding-wosy-async-and-await
[7] https://github.com/app-vnext/polly/issues/281
[8] https://github.com/quozd/awoange-dotnet