Al comparar políticas de Polly sincrónicas y asincrónicas en MVVMCross, o cualquier aplicación .NET, entran en juego varias diferencias y consideraciones de rendimiento:
Políticas sincrónicas
1. Naturaleza de bloqueo: las políticas sincrónicas están bloqueando, lo que significa que ejecutan tareas secuencialmente y esperan que cada tarea se complete antes de pasar a la siguiente. Esto puede conducir a un rendimiento más lento en escenarios que involucran operaciones de E/S o tareas de larga duración, ya que el hilo está vinculado esperando que la operación finalice [4] [6].
2. Utilización de recursos: la programación sincrónica generalmente da como resultado un mayor uso de recursos porque los subprocesos se mantienen en un estado de espera, consumiendo memoria y potencialmente conduciendo al agotamiento del grupo de subprocesos si no se manejan correctamente [4] [2].
3. Escalabilidad: los enfoques sincrónicos son menos escalables en comparación con los asíncronos, especialmente en entornos que requieren una alta concurrencia. Pueden convertirse en cuellos de botella en sistemas que manejan múltiples solicitudes simultáneamente [4].
Políticas asíncronas
1. Naturaleza sin bloqueo: las políticas asincrónicas no son bloqueadas, lo que permite que las tareas se ejecuten de forma independiente sin atar hilos. Esto mejora la capacidad de respuesta y la escalabilidad, especialmente en escenarios que involucran operaciones de E/S o solicitudes de red [4] [3].
2. Eficiencia de recursos: la programación asincrónica optimiza la asignación de recursos al liberar hilos al grupo mientras espera que las operaciones se completen, reducen el uso de la memoria y mejoren la utilización de la CPU [4] [2].
3. Escalabilidad y rendimiento: las políticas asincrónicas son altamente escalables y pueden manejar una gran cantidad de solicitudes concurrentes de manera eficiente. Son particularmente beneficiosos en las aplicaciones del mundo real donde la imprevisibilidad de la carga de trabajo y la distribución desigual son comunes [2] [4].
Comparación de rendimiento
- Rendimiento y escalabilidad: las políticas asincrónicas generalmente ofrecen un mejor rendimiento y escalabilidad en comparación con los sincrónicos, especialmente en escenarios con cargas de trabajo impredecibles o altos requisitos de concurrencia [2] [4].
- Consumo de recursos: las políticas asincrónicas tienden a tener una huella de memoria más baja y una mejor utilización de la CPU en comparación con las sincrónicas, lo que puede conducir a ventajas significativas de rendimiento en entornos con recursos limitados [2] [4].
-Consideraciones de gastos generales: si bien el código asincrónico puede introducir sobrecargas adicionales debido al cambio de contexto y la gestión de tareas, esta sobrecarga a menudo se ve compensada por los beneficios de la ejecución sin bloqueo y la utilización eficiente de los recursos en escenarios de I/O [6] [2].
Especificaciones de Polly
Polly admite políticas síncronas y asincrónicas, proporcionando métodos como 'Ejecutivo' para operaciones sincrónicas y 'ExecuteaseSync` para las asíncronas [3]. Cuando se usa Polly en MVVMCross o marcos similares, elegir entre políticas sincrónicas y asincrónicas depende de los requisitos específicos de su aplicación, como si implica operaciones de E/S o necesita manejar un alto volumen de solicitudes concurrentes.
En resumen, las políticas asincrónicas de Polly generalmente ofrecen un rendimiento y escalabilidad superiores en comparación con las sincrónicas, especialmente en escenarios que involucran operaciones de E/S o alta concurrencia. Sin embargo, las políticas sincrónicas aún pueden ser adecuadas para tareas simples y secuenciales donde la previsibilidad y la ejecución directa son más importantes que la escalabilidad.
Citas:[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-gainst-properly-conf
[3] https://www.nuget.org/packages/polly/7.2.4
[4] https://kissflow.com/application-development/asynchonous-vs-synchronous-programming/
[5] https://stackoverflow.com/questions/59456197/Using-polly-for-a-rety-attempt-from-an-aSync-Function
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2011/october/asynchronous-programming-async-performance-etherstanding-the-costs-of-async-and-wait
[7] https://github.com/app-vnext/polly/issues/281
[8] https://github.com/quozd/awesome-dotnet