Cuando la solicitud http llega a la aplicación Nodejs, la conexión se recibe primero en el hilo principal de Nodejs (que es el hilo principal de js) y se pasa al bucle de eventos, si mi comprensión es correcta.
El bucle de eventos es lo que permite a Nodejs realizar operaciones de E/S sin bloqueo, JavaScript es de un solo subproceso, mediante la descarga de operaciones al kernel del sistema siempre que sea posible.
La declaración anterior es de la documentación oficial de Nodejs, entonces mi pregunta, ¿dónde vive el hilo principal?
fuera del bucle de eventos o dentro del bucle de eventos
ambos son diferentes? ¿Alguien puede dar buenas imágenes de cómo funciona Nodejs internamente, con representación gráfica?
El hilo principal es el hilo de ejecución. Como se le preguntó, permanece fuera del ciclo de eventos y verificará cualquier evento relacionado con el ciclo de eventos.
Si el evento agregado al bucle de eventos es síncrono y solo necesita algunas operaciones de la CPU, el subproceso principal tomará el control directamente y ejecutará la necesidad.
Si se agrega un evento asincrónico al bucle de eventos que se delega a los subprocesos de trabajo disponibles. Los subprocesos de trabajo realizarán la operación asíncrona (llamadas db/API/fs). Una vez que se completa la parte asíncrona del evento, el evento se agrega nuevamente al bucle de eventos para la ejecución de la parte síncrona restante.
Los subprocesos de trabajo se construyen sobre libUV
y se generarán de acuerdo con el requisito del subproceso principal. Esta razón hace que Node.js sea más eficiente al manejar llamadas asíncronas y menos preferido para operaciones de CPU extensas.
Siga esto para una explicación más detallada:
¿Qué función se pone en EventLoop en NodeJs y JS?