¿Cómo es ASP.NET multiproceso?

Me han dicho que ASP.NET tiene varios subprocesos por defecto en IIS. ¿Cómo se logra este enhebrado?

¿La granja de servidores envía diferentes solicitudes a diferentes núcleos?

¿Una sola solicitud utiliza múltiples núcleos?

Más importante aún, ¿hay alguna ventaja en agregar subprocesos al código ASP.NET si el subprocesamiento se realiza más arriba en IIS?

IIS hace uso de múltiples núcleos automáticamente (aunque puede desactivarlo si así lo desea).

La ventaja de agregar subprocesos al código ASP.NET es que usted puede controlar el funcionamiento interno de su propia aplicación y no verse forzado a depender de IIS para tomar todas las decisiones por usted.

El servidor no solo genera diferentes solicitudes a diferentes subprocesos, sino que una sola solicitud puede cambiar el hilo durante el transcurso del ciclo de vida. Esto se llama agilidad de hilo . Estoy buscando un buen artículo que lo explique …

EDITAR: Todavía no hay artículos definitivos, pero una publicación en el blog explica algunas de las dificultades.

EDITAR: Más enlaces de comentarios:

  • Conmutación de subprocesos ASP.NET (publicación de blog)
  • ¿Qué es una “operación asíncrona IO” en .NET? (Pregunta de SO: suena irrelevante pero no lo es)
  • Trazado de ASP.NET y System.Diagnostics (pregunta de SO)
  • Enhebrar las diferencias entre IIS 6 y 7

ASP.net usa .Net threadpool (que es configurable) Cada solicitud es recibida por uno de los hilos en el threadpool, hasta que cada thread ya esté ocupado. Luego solicita cola en la Pila IIS, hasta que esto también se extienda. A partir de allí, las nuevas solicitudes se encuentran con el muy feo mensaje “El servidor no está disponible”.

Esta es la historia habitual de ‘multi-threading’ para un sitio web de ASP.net.

Hay muchas formas de garantizar la escalabilidad. La más obvia es la prueba de rendimiento y la eliminación de cuellos de botella de su código.

ASP.net realmente puede aprovechar los múltiples núcleos al utilizar los hilos de E / S para cualquier solicitud de E / S. Es un código feo pero rápido nunca ha sido bonito.

Aquí está la publicación definitiva de MSDN MAG sobre cómo hacer esto

ACTUALIZAR

Bueno, probablemente bash responder a tu pregunta completa:

“Más importante aún, ¿hay alguna ventaja al agregar subprocesos al código ASP.Net si el subprocesamiento se realiza más arriba en IIS?”

La respuesta corta es: ¡Depende! Si está esperando un proceso largo, entonces sería mejor que implemente una experiencia más agradable para el cliente solicitante (es decir, llamadas fuera de banda AJAX)

si tiene varias tareas independientes que deben completarse para el cliente solicitante, entonces será mejor que genere un nuevo proceso para ejecutar las tareas en paralelo.

Si su sitio recibe mucho tráfico, entonces realmente debe considerar la implementación de patrones asíncronos para utilizar mejor su CPU

Por lo general, se genera un hilo separado para cada nueva solicitud, luego el sistema operativo realiza la progtwigción del procesador. A menos que necesite procesar solo unas pocas solicitudes al mismo tiempo, no necesita un enhebrado adicional.