Dígalo conmigo ahora: programación asíncrona no significa necesariamente multi-threaded.
Javascript es un tiempo de ejecución de subproceso único: simplemente no puede crear nuevos subprocesos en JS porque el idioma/tiempo de ejecución no lo admite.
Frank lo dice correctamente (aunque obtusamente) En inglés: hay un bucle de evento principal que se maneja cuando las cosas entran en su aplicación. Por lo tanto, "gestionar esta solicitud HTTP" se agregará a la cola de eventos, y luego será manejado por el bucle de eventos cuando corresponda.
Cuando llamas a una operación asíncrona (una consulta mysql db, por ejemplo), node.js envía "hey, ejecuta esta consulta" a mysql. Dado que esta consulta llevará algún tiempo (milisegundos), node.js realiza la consulta utilizando la biblioteca asíncrona de MySQL, volviendo al bucle de evento y haciendo algo más allí mientras espera que mysql nos lo devuelva. Como manejar esa solicitud HTTP.
Editar: Por el contrario, Node.js podría simplemente esperar (no hacer nada) para MySQL para volver a ella. Esto se llama una llamada síncrona. Imagine un restaurante, donde su camarero envía su pedido al cocinero, luego se sienta y mueve los pulgares mientras el chef cocina. En un restaurante, como en un programa node.js, tal comportamiento es insensato: tiene otros clientes que tienen hambre y necesitan que se les atienda. Por lo tanto, debe ser lo más asíncrono posible para asegurarse de que un camarero (o proceso node.js) esté sirviendo a tantas personas como les sea posible.
Editar hecho
Node.js comunica con MySQL usando bibliotecas de C, por lo que técnicamente esas bibliotecas de C podría generar roscas fuera, pero por dentro Javascript no se puede hacer nada con hilos.
Más exactamente. "Node.js se comunica con mysql a través de una API asíncrona. La implementación de la API asíncrona está en C y esa implementación solo puede ejecutar la API síncrona a través de un threadpool". El hecho de que la API asíncrona pueda usar un grupo de subprocesos internamente es un detalle de bajo nivel que no le importa. – Raynos
Ah, entonces el mysql se ejecuta en un hilo diferente, luego agrega un evento a JS cuando termina.Si quisiera crear un módulo asíncrono, podría usar los procesos hijos en el nodo para lograr el mismo efecto. – BigOmega
Creo que es mejor evitar aquí la palabra 'hilo': las personas llegan a conclusiones falsas cuando lo oyen. una llamada asincrónica puede usar un hilo, o tenedor de un proceso, o hacer lo que sea; Lo importante es que puede ocurrir una devolución de llamada o un evento más adelante en el ciclo de evento. – flow