Habla de conceptos interesantes, verdad 100 hilos de ejecución por procesador ?
"La programación asíncrona, como todo buen conocedor
de los fundamentos de la plataforma .NET
sabe, permite que un proceso disponga de múltiples
subprocesos o hilos de ejecución que nos proporcionan
la posibilidad de llevar a cabo más de una
acción al mismo tiempo o ejecutar acciones en
segundo plano.
En el caso de las aplicaciones Web
ASP.NET,
la programación asíncrona se utiliza para mejorar
enormemente la eficiencia de las páginas Web que
tardan mucho en ejecutarse debido a operaciones
de entrada/salida que pueden llegar a ser largas.
Esta mejora viene del modo en que Internet Information
Server procesa las peticiones de páginas que
se realizan por parte de los distintos usuarios.
Un barniz de cómo procesa
las peticiones IIS
Cuando se alcanza ese límite y todos los hilos
están ocupados, IIS encola las nuevas peticiones
que lleguen para atenderlas en cuanto le sea posible.
Mientras tanto, estas peticiones estarán pendientes
y sin ofrecer respuesta a los usuarios. En
casos extremos, los usuarios comenzarán a recibir
códigos de estado 503 de “servicio no disponible”
y no se procesarán las páginas.
Cuando una petición termina de ser atendida, su
hilo correspondiente se libera y se devuelve al pool y
queda disponible para procesar otra petición. En condiciones
normales, el tiempo que uno de estos hilos
está ocupado es muy pequeño y se pueden atender
muchas peticiones prácticamente simultáneas sin
problema. Las dificultades comienzan cuando una
de nuestras páginas realiza alguna operación que tarda
mucho tiempo en ejecutarse. Mientras se ejecuta
esta operación larga, el hilo estará bloqueado, y a
medida que se realicen peticiones a ésta u otras páginas
de ejecución larga quedarán bloqueados más hilos,
disminuyendo notablemente la escalabilidad de la
aplicación, puesto que no habrá subprocesos disponibles
para atender más peticiones. Debemos intentar
evitar esta situación en la medida de lo posible.
Generalmente, estas operaciones largas se corresponden
con operaciones de E/S, como esperar a que
se procese una consulta larga en el servidor de datos
o acceder a un servicio Web remoto que puede tener problemas de tráfico.
Todas estas tareas
tienen asociados métodos nativos para
hacer llamadas asíncronas que podemos
utilizar en nuestras páginas con la infraestructura
de asincronía de
ASP.NET que
ahora veremos. Al ejecutar de forma asíncrona
las llamadas a esos procesos largos,
conseguimos que el subproceso principal
que atiende la petición quede liberado y
se devuelva al pool para poder atender nuevas
peticiones de otros usuarios. Al terminar
la ejecución asíncrona, se recupera
un hilo del repositorio para devolver
los resultados al cliente.
En general,
nos beneficiaremos más
de la ejecución asíncrona en situaciones
en las que el proceso largo se ejecute
en otro servidor, como en los ejemplos
citados.
El motivo es que si lo único
que hace nuestro código es esperar
a que termine alguna tarea remota en
el servidor de datos o en otro servidor
Web, mientras se espera en segundo
plano el impacto sobre la capacidad de
proceso es prácticamente nulo, por lo
que devolver el proceso a IIS asegura
que se gestionen nuevas peticiones de
páginas sin mermar el rendimiento. Sin
embargo, si el proceso largo implica
realizar una tarea intensiva en nuestro
propio servidor (procesar un archivo
muy grande o acceder a la base de datos
local), liberamos el subproceso para
atender nuevas llamadas, pero hay un
procedimiento ejecutándose en segundo
plano que compite con IIS por los
recursos de la máquina. En este caso,
tendremos una mayor capacidad de respuesta
a peticiones (escalabilidad), pero
probablemente el aumento de rendimiento
no sea apreciable. Es importante
tener claro este concepto."
Qué opinan de Páginas asíncronas en
ASP.NET ? cuándo utilizarlas ? casos real world ?
Alguna referencia más:
Sería interesante una serie succinctly sobre ello :-)
The Succinctly series
This frustration translated into a deep desire to produce a series of concise technical books that would be targeted at developers working on the Microsoft platform.
We firmly believe, given the background knowledge such developers have, that most topics can be translated into books that are between 50 and 100 pages.
This is exactly what we resolved to accomplish with the Succinctly series. Isn’t everything wonderful born out of a deep desire to change things for the better?