nodejs no es de subproceso múltiple, sino de subproceso único; nodejs utiliza un modo sin bloqueo asíncrono de subproceso único. Debido al motor JavaScript, el nodo es de subproceso único de forma predeterminada. Una aplicación de nodejs no puede utilizar recursos de múltiples núcleos. Método de "E/S" asíncrono y controlado por eventos para lograr un entorno de ejecución de alta concurrencia y de un solo subproceso.
El entorno operativo de este artículo: sistema Windows 10, versión nodejs 12.19.0, computadora Dell G3.
El nodo tiene un solo subproceso y utiliza un modo asincrónico sin bloqueo de un solo subproceso.
Debido al motor JavaScript, el nodo tiene un solo subproceso de forma predeterminada y una aplicación node.js no puede utilizar recursos de múltiples núcleos.
Node.js utiliza E/S asincrónicas y controladas por eventos para implementar un entorno de ejecución de alta concurrencia y de un solo subproceso. Un solo subproceso significa que solo se puede hacer una cosa al mismo tiempo.
Nodejs implementa asíncrono y sin bloqueo:
En nodejs, solo la ejecución de js es en realidad de un solo subproceso, y la E/S obviamente son otros subprocesos.
El subproceso de ejecución de js es de un solo subproceso. Siempre que la E/S requerida se pase a libuv, volverá a hacer otras cosas inmediatamente y luego libuv volverá a llamar en el momento especificado.
En detalle, nodejs primero lo llama desde el código js en enlaces de nodo al código C/C, y luego encapsula algo llamado "objeto de solicitud" en el código C/C y lo pasa a libuv. Algunos de estos objetos de solicitud son similares a las devoluciones de llamada de funciones que deben ejecutarse. Simplemente ejecute la devolución de llamada a libuv e implemente la devolución de llamada después de la ejecución.
En resumen, el proceso general de E/S asíncrona es el siguiente.
1. Iniciar una llamada de E/S
El usuario llama al módulo principal de Node desde el código Javascript y pasa parámetros y funciones de devolución de llamada al módulo principal.
El módulo principal de Node encapsula los parámetros pasados y las funciones de devolución de llamada en el objeto de solicitud.
Empuje este objeto de solicitud al grupo de subprocesos de E/S para esperar a que se ejecute;
La llamada asincrónica de Javascript finaliza y el hilo de Javascript continúa realizando operaciones posteriores.
2. Ejecutar devolución de llamada
Una vez completada la operación de E/S, la función de devolución de llamada previamente encapsulada en el objeto de solicitud se recupera y ejecuta para lograr el propósito de la devolución de llamada de Javascript. (Los detalles de la devolución de llamada aquí se explican a continuación)
Se puede ver desde aquí que en realidad siempre hemos entendido mal el hilo único de Node.js.
De hecho, un solo subproceso se refiere a un solo subproceso en el entorno de ejecución de Javascript, y Node.js no tiene la capacidad de crear nuevos subprocesos cuando ejecuta Javascript. Las operaciones reales finales todavía se realizan en Libuv y su bucle de eventos. Es por eso que Javascript, un lenguaje de subproceso único, puede implementar operaciones asincrónicas en Node.js. Los dos no entrarán en conflicto.
Amplíe sus conocimientos:
Descripción general del subproceso múltiple de Node.js
Algunas personas pueden decir que aunque Node.js tiene un solo subproceso, puede usar eventos cíclicos (Event Loop) para implementar tareas de ejecución concurrentes. Al investigar su esencia, NodeJs en realidad usa dos subprocesos diferentes, uno es el subproceso principal para procesar eventos de bucle y el otro son algunos subprocesos auxiliares en el grupo de trabajadores. Las principales funciones y relaciones de estos dos subprocesos son las siguientes:
Aprendizaje recomendado: "videotutorial de nodejs"
Lo anterior son los detalles de si nodejs es multiproceso. Para obtener más información, preste atención a otros artículos relacionados en este sitio.