¿Cómo escuchan los servidores web las nuevas solicitudes?
Cuando aprenda sobre los servidores web y cómo funcionan, es posible que tenga curiosidad si escuchan constantemente las solicitudes o si esperan hasta que reciben una solicitud para entrar en acción. Con eso en mente, la publicación de preguntas y respuestas de SuperUser de hoy tiene las respuestas para satisfacer la curiosidad de un lector.
La sesión de Preguntas y Respuestas de hoy nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, un grupo de sitios web de preguntas y respuestas impulsado por la comunidad..
Captura de pantalla cortesía de xmodulo / Linux Screenshots (Flickr).
La pregunta
SuperUser reader user2202911 quiere saber cómo los servidores web escuchan las nuevas solicitudes:
Estoy tratando de entender los detalles del "nivel más profundo" de cómo funcionan los servidores web. Quiero saber si un servidor, por ejemplo, Apache, por ejemplo, está sondeando continuamente para nuevas solicitudes o si funciona mediante algún tipo de sistema de interrupción. Si es una interrupción, ¿qué está provocando la interrupción? ¿Es el controlador de la tarjeta de red??
¿Cómo un servidor web escucha nuevas solicitudes??
La respuesta
El colaborador de SuperUser Greg Bowser tiene la respuesta para nosotros:
La respuesta corta es algún tipo de sistema de interrupción. Esencialmente, usan bloqueo de E / S, lo que significa que duermen (bloquean) mientras esperan nuevos datos.
- El servidor crea un conector de escucha y luego lo bloquea mientras espera nuevas conexiones. Durante este tiempo, el kernel pone el proceso en una sueño interrumpible Estado y ejecuta otros procesos. Éste es un punto importante; tener la encuesta de proceso continuamente desperdiciaría los recursos de la CPU. El kernel puede usar los recursos del sistema de manera más eficiente bloqueando el proceso hasta que haya trabajo que hacer.
- Cuando nuevos datos llegan a la red, la tarjeta de red emite una interrupción.
- Al ver que hay una interrupción de la tarjeta de red, el kernel, a través del controlador de la tarjeta de red, lee los nuevos datos de la tarjeta de red y los almacena en la memoria. (Esto debe hacerse rápidamente y generalmente se maneja dentro del manejador de interrupciones).
- El kernel procesa los datos recién llegados y los asocia con un socket. Un proceso que está bloqueando en ese socket se marcará como ejecutable, lo que significa que ahora es apto para ejecutarse. No necesariamente se ejecuta inmediatamente (el kernel puede decidir ejecutar otros procesos todavía).
- En su tiempo libre, el núcleo activará el proceso del servidor web bloqueado. (Dado que ahora es ejecutable.)
- El proceso del servidor web continúa ejecutándose como si no hubiera pasado ningún tiempo. Su llamada al sistema de bloqueo regresa y procesa cualquier dato nuevo. Entonces ve al paso 1.
¿Tienes algo que agregar a la explicación? Apaga el sonido en los comentarios. ¿Quieres leer más respuestas de otros usuarios de Stack Exchange con experiencia en tecnología? Echa un vistazo a la discusión completa aquí.