Tengo dos aplicaciones Express que se ejecutan en un puerto diferente, como sabemos, Express se ejecuta en un solo subproceso, entonces, ¿se asignan núcleos diferentes?
El módulo de clúster replica la aplicación Express haciéndolos usar un núcleo diferente.
Pero supongamos que si tomo dos o más aplicaciones y las conecto, ¿eso significa que casi he creado un módulo de clúster?
Dos aplicaciones express que se ejecutan en el mismo proceso de nodejs compartirán el hilo que usa nodejs para ejecutar su Javascript. También compartirán la misma cola de eventos. Por lo tanto, si llega una solicitud aproximadamente al mismo tiempo para cada aplicación Express, una se ejecutará primero y luego la otra tendrá la oportunidad de ejecutarse. No se ejecutarán en paralelo en diferentes núcleos.
El módulo de clúster en realidad inicia procesos de nodejs adicionales y luego enruta las conexiones entrantes a los procesos en clúster. En ese caso, tiene procesos completamente separados que se ejecutan de forma independiente y pueden usar núcleos separados.
Dos aplicaciones express que se ejecutan en la misma aplicación nodejs no proporcionarán el mismo tipo de simultaneidad multinúcleo que la agrupación en clústeres.
Tengo dos aplicaciones Express que se ejecutan en un puerto diferente, como sabemos, Express se ejecuta en un solo subproceso, entonces, ¿se asignan núcleos diferentes?
No. Nodejs tendrá un subproceso que dará servicio a ambas aplicaciones Express.
Pero supongamos que si tomo dos o más aplicaciones y las conecto, ¿eso significa que casi he creado un módulo de clúster?
No. Dos o más aplicaciones Express en el mismo proceso de nodejs no crean el equivalente a la agrupación en clústeres. De hecho, no le brinda ninguna ventaja en absoluto en comparación con tener la misma cantidad de solicitudes atendidas por una aplicación Express en su proceso de nodejs.
Si desea que dos aplicaciones Express tengan acceso a su propio núcleo de CPU, debe colocar cada aplicación Express en su propio proceso nodejs. Luego, el sistema operativo puede asignar un núcleo separado a cada proceso de nodejs.
Además, tenga en cuenta que la aplicación en sí no elige un núcleo. El sistema operativo analiza qué subprocesos en qué procesos están esperando para ejecutarse y asigna un núcleo. Esa asignación puede incluso ser dinámica (cambiar el núcleo que usa con el tiempo). Si bien un sistema operativo preferirá usar el mismo núcleo para un proceso dado a lo largo del tiempo (debido a la posibilidad de un mejor almacenamiento en caché), no está obligado a usar solo el mismo núcleo.
El sistema operativo administra y asigna el núcleo de la CPU en función de la demanda de los procesos de la competencia.