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?
Respuesta
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.
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í:
- ¿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.
- ¿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).
- 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.
- 1. Cómo se asignan los eventos en .NET
- 2. ¿Cómo se asignan los subprocesos para manejar la solicitud del servlet?
- 3. Donde se asignan los recursos no administrados
- 4. ¿Cómo, en todo caso, los Procesos de Erlang se asignan a Kernel Threads?
- 5. ¿Cómo se comparten los registros entre subprocesos?
- 6. ¿Cómo se asignan los nombres de los paquetes de Hackage a los nombres de 'cabal install'?
- 7. Los ID de recursos de Android se asignan incorrectamente
- 8. Mejorar __init__ donde args se asignan directamente a los miembros
- 9. ¿Las estructuras siempre se asignan asignadas o, a veces, se asignan montones?
- 10. ¿Los ActionFilterAttributes se reutilizan en los subprocesos? ¿Cómo funciona?
- 11. se notificará cuando se hayan terminado todos los subprocesos de subprocesos de subprocesos
- 12. IIS7 Integrated vs Classic Pipeline: ¿qué utiliza más subprocesos ASP.NET?
- 13. ¿Los asignadores personalizados en STL solo asignan los datos reales?
- 14. SET versus SELECT cuando se asignan variables?
- 15. ¿Cómo se asignan las variables de memoria en Javascript?
- 16. Espere a que se completen los subprocesos
- 17. ¿Cómo se asignan las subclaves HKEY_USERS y los nombres de usuario de Windows?
- 18. En IIS7, los archivos comprimidos no se quedan así
- 19. ¿Cuándo se inicializan las variables de instancia y se asignan los valores?
- 20. En ARC, ¿se copian automáticamente los bloques cuando se asignan a un ivar directamente?
- 21. ¿Cómo obtener los subprocesos 'stdout data asincrónicamente?
- 22. Cómo matar todos los subprocesos de shell?
- 23. ¿Cómo implemento los comentarios de subprocesos?
- 24. referencedColumnNames de hibernación no se asignan a una sola propiedad
- 25. ¿Por qué los valores de parámetro predeterminados de Ruby no se asignan a argumentos nulos?
- 26. ¿Se puede instalar IIS7 en XP?
- 27. ¿Por qué los subprocesos del sistema operativo se consideran caros?
- 28. iis7 aumentar el número de subprocesos/solicitudes simultáneas por proceso de trabajo
- 29. ¿Cómo se asignan los caracteres de reemplazo de mapa en Javascript de forma similar a la función 'tr' en Perl?
- 30. subprocesos que se ejecutan cuentan
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
Ver http://stackoverflow.com/questions/4839657/how-are-threads-tied-to-requests-through-http-sys-iis-and-asp-net –