¿Cómo se vinculan los hilos a las solicitudes a través de Http.sys, IIS y ASP.NET?
multithreading (1)
De mi investigación hasta ahora, entiendo que cuando llega una solicitud se pone en una cola de solicitudes en modo kernel. De acuerdo con this , esto evita muchos de los problemas con el cambio de contexto cuando hay cantidades masivas de solicitudes (o procesos o subprocesos ...), proporcionando beneficios similares a IO con ventaja. Citado del artículo:
"Cada cola de solicitudes corresponde a un grupo de aplicaciones. Un grupo de aplicaciones corresponde a una cola de solicitudes dentro de HTTP.sys y uno o más procesos de trabajo".
De acuerdo con eso, cada cola de solicitudes puede tener más de un " Proceso de trabajo ". (Caché de Google) Más sobre procesos de trabajo
Desde mi entendimiento:
- IIS se abre crea una cola de solicitudes (consulte la api http.sys a continuación)
- Un "sitio web" configurado en IIS corresponde a un proceso de trabajo
- Un sitio web / proceso de trabajo shares el grupo de subprocesos.
- Un hilo recibe una solicitud de la cola de solicitudes.
Aquí hay mucha información excelente sobre la arquitectura de IIS7
Aquí hay más información sobre http.sys .
Preguntas abiertas que aún tengo:
- ¿Cómo diablos hace IIS cambiar el encabezado del servidor si utiliza HTTP.SYS? ( Ver esta pregunta )
Nota: no estoy seguro de si / cómo una "cola de solicitud de modo Kernel" corresponde a un puerto de terminación de IO , supongo que cada solicitud tendría la suya propia, pero no sé, así que realmente espero que alguien responda esto más a fondo. Acabo de tropezar con esta pregunta y parece que http.sys de hecho usa los puertos IO Completion, que deberían proporcionar casi todos los mismos beneficios que IO (node.js, nginx, lighttpd, C10K, etc ...) tienen .
Actualmente estoy leyendo mucho sobre node.js. Hay una comparación frecuente entre servidores que usan un hilo tradicional por modelo de solicitud (Apache) y servidores que usan un bucle de evento (Nginx, nodo, Tornado).
Me gustaría conocer en detalle cómo se procesa una solicitud en ASP.NET, desde el punto en que se recibe en http.sys hasta que se procesa en ASP.NET. Encontré la documentación de MSDN en http.sys e IIS un poco ausente, pero tal vez mi google-fu es débil hoy. Hasta ahora, el mejor recurso que he encontrado es una publicación en el blog de Thomas Marquardt .
¿Alguien podría arrojar más luz sobre el tema o señalarme otros recursos?
(A los fines de esta pregunta, solo me interesa IIS7 con una tubería integrada típica)