Escribí una aplicación cliente-servidor de javascript donde envío 1000 solicitudes HTTP a mi servidor (escuchando en localhost: 5000) y espero la respuesta para cada una:
const SendRequest = async () => { const res = await fetch("http://localhost:5000") return res } for(let i=0;i<1000;i++) { SendRequest().then(res => console.log(res.status)) console.log("request sent") }Cuando ejecuté el código anterior usando nodejs, se registraron 1000 mensajes de "solicitud enviada" en la consola y luego, después de un tiempo, vi que se registraron 1000 respuestas del servidor en rápida sucesión.
Según tengo entendido, Javascript tiene un solo subproceso, pero nodejs puede usar otros subprocesos para manejar cosas como setTimeout y esperar una respuesta HTTP (ref: ¿Qué diablos es el bucle de eventos de todos modos? | Philip Roberts | JSConf EU ). Mi sistema tiene 6 núcleos y 12 subprocesos. Mi pregunta es: ¿cómo puede esperar miles de tales operaciones a la vez, incluso si usa los 12 subprocesos?
Aquí está el código del lado del servidor:
app.get("/", async (req, res) => { console.log("Connection established"); setTimeout(() => { console.log("Sending res") res.send("Hello from the server") }, 5000) //send response after waiting for 5 seconds })Aquí, vi "Conexión establecida" registrada 1000 veces cuando envié las solicitudes del cliente y 5 segundos después, "Enviando res" se registró 1000 veces en cuestión de milisegundos y todas las 1000 respuestas enviadas a la vez que fueron recibidas por el cliente. Nuevamente, mi pregunta es similar, ¿cómo se ejecutaron simultáneamente estos 1000 setTimeouts, cada uno de 5 segundos, incluso si usamos todos los subprocesos en el sistema?