No bifurcaciones (también conocido como single-threaded o select()
-based) servidores web como lighttpd o nginx son ganando en popularidad cada vez más.¿Cómo funciona un servidor web no bifurcado?
Si bien hay una gran cantidad de documentos que explican la bifurcación de servidores (en varios niveles de detalle), la documentación para servidores no bifurcables es escasa.
Busco a un ojos de pájaro vista de cómo un servidor no se bifurcan web funciona. (Pseudo-) código o un diagrama de máquina de estado, desglosado al mínimo mínimo, sería genial.
Conozco los siguientes recursos y los encontré útiles.
Sin embargo, estoy interesado en los principios, no de los detalles de implementación.
Específicamente:
¿Por qué este tipo de servidor llama a veces no bloqueante, cuando
select()
esencialmente bloques?El procesamiento de una solicitud puede llevar un tiempo. ¿Qué ocurre con las nuevas solicitudes durante este tiempo cuando no hay un hilo o proceso de escucha específico? ¿El procesamiento de la solicitud se ha interrumpido de alguna manera o se ha cortado el tiempo?
Editar: Como lo entiendo, mientras se procesa una solicitud (por ejemplo ficheros de lectura o escritura de cgi plazo) el servidor no puede aceptar nuevas conexiones. ¿No significaría esto que un servidor de este tipo podría perder muchas conexiones nuevas si se ejecuta una secuencia de comandos CGI, digamos unos 2 segundos más o menos?
yo creo que un bifurcan no sea un servidor web sería un mal partido a cualquier servidor web que quería servidor de más de una cantidad trivial de contenido dinámico . – Eddie
@Eddie No en lo más mínimo. Con n procesadores, tener más de n hilos no te permitirá hacer más trabajo. Un servidor asíncrono correctamente diseñado puede hacer tanto trabajo como bifurcar o enhebrar. –
@Nick Johnson: Depende. Si tiene N procesadores y N subprocesos, en la medida en que una solicitud bloquea la espera de E/S, en realidad no está utilizando su procesador a menos que cree más subprocesos. Por ejemplo, si tiene que ir a la base de datos para satisfacer una solicitud dinámica, ese hilo se detiene hasta que obtenga una respuesta. Con solo N hilos, puede pasar la mayor parte de su tiempo esperando y solo una pequeña cantidad de su tiempo realmente procesando. – Eddie