Diferencia de rendimiento entre el Controlador HTTP Síncrono y el Controlador HTTP Asíncrono


¿Hay una diferencia de rendimiento entre el Controlador HTTP Síncrono y el Controlador HTTP Asíncrono? IHttpHandler vs IHttpAsyncHandler

¿Por qué elegir uno sobre otro?

¿cuáles son los beneficios?

Author: Asdfg, 2011-08-18

2 answers

ASP.NET utiliza el grupo de subprocesos para procesar solicitudes HTTP entrantes.

Cuando se llama a un IHttpHandler, se usa un subproceso de grupo de subprocesos para ejecutar esa solicitud y se usa el mismo subproceso para procesar toda la solicitud. Si esa solicitud llama a una base de datos u otro servicio web o cualquier otra cosa que pueda llevar tiempo, el subproceso del grupo de subprocesos espera. Esto significa que los subprocesos del grupo de subprocesos pasan tiempo esperando cosas cuando podrían usarse para procesar otras solicitudes.

En contraste, cuando un IHttpAsyncHandler, existe un mecanismo para permitir que la solicitud registre una devolución de llamada y devuelva el subproceso del grupo de subprocesos al grupo antes de que la solicitud se procese completamente. El subproceso del grupo de subprocesos comienza a procesar la solicitud. Probablemente llama a algún método asincrónico en una llamada de base de datos o servicio web o algo y luego registra una devolución de llamada para ASP.NET para llamar cuando esa llamada regrese. En ese momento, el subproceso del grupo de subprocesos que estaba procesando la solicitud HTTP se devuelve al grupo a procesar otra solicitud HTTP. Cuando la llamada a la base de datos o lo que sea vuelve, ASP.NET activa la devolución de llamada registrada en un nuevo subproceso de grupo de subprocesos. El resultado final es que no tiene subprocesos de grupo de subprocesos esperando operaciones vinculadas a E/S y puede usar su grupo de subprocesos de manera más eficiente.

Para aplicaciones de muy alta concurrencia (cientos o miles de usuarios verdaderamente simultáneos), IHttpAsyncHandler puede proporcionar un gran impulso en la concurrencia. Con un menor número de usuarios, no puede sigue siendo un beneficio si tiene solicitudes muy largas (como una solicitud de Votación larga). Sin embargo, la programación bajo el IHttpAsyncHandler es más complicada, por lo que no debe usarse cuando realmente no es necesario.

 24
Author: Samuel Neff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-18 03:49:01

No hay diferencia de rendimiento aparte de administrar otro hilo.

Synchronous es más fácil de codificar. Usted envía la solicitud y el hilo se congela hasta que se devuelve la respuesta. Luego puede manejar la respuesta y los errores en el mismo método. Es fácil de leer y depurar. Si ejecuta este código en su subproceso GUI, Windows puede informar que su programa "no responde" si no recibe una respuesta rápidamente.

Use Asíncrono si no desea que su hilo congelar. El usuario puede continuar interactuando con el programa mientras una tarea en segundo plano espera la respuesta HTTP. Luego tienes que escribir código para administrar la tarea en segundo plano, ver cuando está completa, manejar errores,pasar estos errores de nuevo al subproceso GUI, etc. Es un poco más de trabajo, y mucho más difícil de leer y depurar, pero en última instancia, un producto de mejor calidad si se hace correctamente.

Editar: Corregido que los métodos síncronos congelan el hilo, no necesariamente el todo programa.

 2
Author: Hand-E-Food,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-18 04:31:43