2011-02-05 14 views
9

Agregué log4net a mi aplicación y ahora puedo ver los Id de la cadena de actividades del usuario mientras navegan por mi sitio web. ¿Hay algún algoritmo específico sobre cómo ocurre la asignación de subprocesos con IIS7, o es solo una asignación aleatoria de números (sospecho que no es completamente aleatoria porque mi sitio de poco tráfico muestra subprocesos en su mayoría en el rango 10-30)? Cualquier cantidad máxima a la cantidad de hilos disponibles? Y me doy cuenta de que mi programador aparece con una identificación de hilos extraña, ¿hay alguna razón para esto? El programador es Quartz.net y la identificación se muestra como "Scheduler_Worker-10", y no solo un número.¿Cómo se asignan los subprocesos IIS7?

+0

Supongo que tiene al menos 1 hilo asignado por conexión, entonces probablemente unos pocos hilos maestros para la aplicación (para aceptar conexiones, gestionar el estado global de la aplicación, etc.). No estoy publicando esto como una respuesta, porque es solo una suposición. – IDWMaster

+2

Ver http://stackoverflow.com/questions/4839657/how-are-threads-tied-to-requests-through-http-sys-iis-and-asp-net –

Respuesta

8

This explica todo lo que necesita saber.

un extracto:

Cuando ASP.NET está alojado en IIS 7.0 en modo integrado, el uso de hilos es un poco diferente. En primer lugar, las colas de nivel de aplicación ya no existen. Su rendimiento siempre fue realmente malo, no había esperanza en arreglar esto, y así nos deshicimos de ellos. Pero quizás la mayor diferencia es que en IIS 6.0 , o el modo ISAPI, ASP.NET limita el número de threads concurrentes solicitudes de ejecución, pero en IIS 7.0 modo integrado, ASP.NET limita el número de ejecutar concurrentemente solicitudes . La diferencia solo importa cuando las solicitudes son asíncronas (la solicitud tiene un controlador asincrónico o un módulo en la tubería completa de forma asíncrona). Obviamente, si los reqeusts son síncronos, a continuación, el número de ejecutar concurrentemente solicitudes es el mismo que el número de hilos se ejecutan simultáneamente peticiones, pero si las solicitudes son asíncrono entonces estos dos números puede ser bastante diferente como lo haría tienen muchos más requisitos que los hilos.

Básicamente, si las solicitudes son sincrónicas, el mismo número de hilos por solicitud. Vea aquí para varios parameters.

4

he explicado esto es una entrada de blog en mi blog ASP.NET Performance-Instantiating Business Layers

El título no coincide con su pregunta, pero le explico la forma de IIS trata las solicitudes y creo que tendrá su respuesta.

Una cita del artículo

Cuando IIS campos de una solicitud para su aplicación se lo entrega al proceso trabajador. El proceso de trabajo en crea su instancia y la instancia de su clase global (que es de tipo HttpApplication). Desde ese punto en tiene lugar el flujo típico de una aplicación ASP.NET (la tubería ASP.NET ).Sin embargo, lo que hay que conocer y entender es que el proceso de trabajo (piensa en él como IIS en realidad) mantiene la instancia de su HttpApplication (una instancia de su de clase mundial) con vida, con el fin de desplegar otros solicitudes . De hecho, por defecto sería crear y almacenar en caché hasta 10 instancias de la clase mundial, si requerida (Lazy instanciación) dependiendo de la carga del número de solicitudes su sitio web recibe otros factores . En la Figura 1 anterior, las instancias de su aplicación ASP.NET se muestran como cuadros rojos. No podría ser hasta 10 de estos en caché por el proceso de trabajo. Estos son realmente los hilos que el proceso de trabajo tiene creado y en caché y cada hilo tiene su propia instancia de su clase Global. Tenga en cuenta que cada uno de estos subprocesos está en el mismo Dominio de aplicación. Por lo tanto, cualquier clase estática que pueda tener en su aplicación se comparte en cada uno de estos hilos o instancias instancias.

Le sugiero que lea ese artículo y estaremos encantados de responder a cualquier pregunta que pueda tener. Tenga en cuenta que intencionalmente he mantenido el artículo simple en el sentido de que no hablo sobre lo que sucede en el núcleo ni de los detalles de los diversos componentes que participan. Mantenerlo simple ayuda a las personas a entender los conceptos mucho mejor (lo siento).

Voy a responder a algunas de sus otras preguntas aquí:

  1. ¿Hay algún algoritmo específico a la forma de asignación hilos sucede con IIS7?

No, para todos los propósitos es aleatorio. Esto se explica en el artículo que señalé. La respuesta corta es que si hay un hilo almacenado en caché, los II lo usarán. De lo contrario, creará un nuevo hilo, creará una instancia de su HttpApplication (Global) y le asignará todo el contexto. Por lo tanto, en un sitio que no está ocupado, es posible que vea que los mismos subprocesos manejan las solicitudes. Pero no hay garantías. Si hay más de un hilo libre, IIS elegirá un hilo al azar para atender esa solicitud. Debe tener en cuenta aquí, que incluso en un sitio no muy ocupado, si sus solicitudes toman mucho tiempo, IIS se verá obligado a crear nuevos subprocesos para atender otras solicitudes entrantes.

  1. ¿Hay un número máximo de hilos disponibles?

Sí (como se explica en el artículo) normalmente 10 hilos por proceso de trabajo. Esto se puede ajustar, pero he trabajado en una serie de sitios web extremadamente ocupados y nunca he tenido que hacerlo. La clave es hacer que sus aplicaciones respondan lo más rápido posible. Tenga en cuenta que una aplicación puede tener varios procesos de trabajo asignados (configurados en su grupo de aplicaciones), por lo que en sitios ocupados realmente desea múltiples procesos de trabajo para su aplicación, pero la consecuencia es que tiene el hardware requerido (núcleos de CPU y memoria).

  1. El planificador es Quartz.net y el ID de muestra como "Scheduler_Worker-10", y no sólo un número

hilos pueden tener nombres en lugar de documentos de identidad. Si al subproceso se le ha asignado un nombre, entonces lo verá en lugar de un id.Por supuesto, para los hilos que IIS crea no tiene ese control. Eso sí, no he usado (ni conozco Quartz) así que no sé nada de eso, pero supongo que ese es el caso.

Cuestiones relacionadas