2012-08-02 14 views
5

Tengo una variación de los beneficios de async/await-on-ASP.NET desde this question.ASP.NET async/await part 2

Según tengo entendido, la asincronía no es lo mismo que el paralelismo. Entonces, en un servidor web, me pregunto cuánto beneficio trae async/await a las páginas ASP.NET.

¿No es IIS + ASP.NET realmente bueno para asignar hilos a las solicitudes, y si la página onen está ocupada esperando un recurso, el servidor simplemente pasará a procesar otra solicitud que tiene trabajo por hacer?

Hay un número limitado de subprocesos en el grupo para que use ASP.NET, ¿los usa de manera asíncrona de manera más efectiva?

Como el Sr. Skeet señaló al responder a la pregunta anterior, no estamos hablando de bloquear un hilo de interfaz de usuario. Ya tenemos varios subprocesos y la respuesta web no se puede completar hasta que todas las tareas de la solicitud estén listas, asincrónicas o no, ¿no?

supongo que lo que se reduce a lo siguiente:

¿Hay algún beneficio a una lectura asíncrona de un recurso (por ejemplo un archivo o solicitud DB) en una página ASP.NET vs bloqueo en él?

+0

¿De verdad leíste la respuesta de Jon Skeet que mencionaste? Él explica los beneficios de usar 'async' en ASP.NET. – svick

+0

@svick: Gracias por leer. Sí, leí la respuesta de Jon, pero en muchos casos dice "depende", que supongo es la ÚNICA respuesta que * puede * dar. Me gustaría entender las implicaciones de subprocesamiento de async/await en un servidor web de alto volumen. – n8wrl

Respuesta

8

si una página está ocupada esperando un recurso, el servidor simplemente cambiará al procesamiento de otra solicitud que tiene trabajo por hacer?

No lo creo. Sería muy sorprendido si este fuera el caso. Es teóricamente posible, pero muy complejo.

Hay un número limitado de subprocesos en el grupo para que use ASP.NET, ¿los usa de manera asíncrona de manera más efectiva?

Sí, porque cuando await algo, el hilo de esa solicitud se devuelve inmediatamente al grupo.

Ya tenemos varios subprocesos y la respuesta web no se puede completar hasta que todas las tareas de la solicitud estén listas, asincrónicas o no, ¿no?

Eso es correcto. async en un escenario de servidor se trata de eliminar la presión en el grupo de subprocesos.

¿Hay alguna ventaja en una lectura asíncrona de un recurso (por ejemplo, un archivo o solicitud de base de datos) en una página ASP.NET frente a un bloqueo en ella?

¡Absolutamente!

Si bloquea en una solicitud de archivo/llamada de servicio/db, entonces ese subproceso se utiliza para la duración de esa operación. Si await una solicitud de archivo/llamada de servicio/db, ese hilo se devuelve inmediatamente al grupo de subprocesos.

Uno de los resultados (¡realmente genial!) Es que puede tener una solicitud en curso, y mientras (a) espera alguna operación, hay no hilos que dan servicio a esa solicitud. Concurrencia de cero subprocesos, si se quiere.

Cuando finaliza la operación, el método se reanuda después del await - en un subproceso (posiblemente diferente) del grupo de subprocesos.

En conclusión: async escalas mejores que los hilos, por lo que definitivamente hay un beneficio en el lado del servidor.

Más información: mi propio intro to async post y this awesome video.

+0

Advertencia de la ventaja de esta [respuesta] más reciente (http://stackoverflow.com/a/30574578/1497596) tuya: "Si estás hablando de ASP.NET MVC con un back-end de base de datos única, entonces estás (casi seguro) no obtendrán ningún beneficio de escalabilidad de 'async'. Esto se debe a que IIS puede manejar muchas más solicitudes concurrentes que una sola instancia de SQL Server (u otro RDBMS clásico). Sin embargo, si su back-end es más moderno: un SQL clúster de servidor, Azure SQL, NoSQL, etc., y su backend puede escalar, y su cuello de botella de escalabilidad es IIS, * entonces * puede obtener un beneficio de escalabilidad de 'async'." – DavidRR

Cuestiones relacionadas