El mecanismo asincrónico del nodo se basa en "eventos". Todas las consultas de E/S, comunicación de red y bases de datos se ejecutan sin bloqueo y los resultados devueltos son procesados por el bucle de eventos. Node solo procesará un evento al mismo tiempo e ingresará inmediatamente al bucle de eventos para verificar los eventos posteriores una vez completado. De esta manera, la CPU y la memoria pueden concentrarse en procesar una cosa al mismo tiempo, mientras intentan permitir que las operaciones de E/S y otras operaciones que consumen mucho tiempo se ejecuten en paralelo.
El entorno operativo de este tutorial: sistema Windows 7, nodejs versión 16, computadora DELL G3.
NodeJS es de un solo subproceso y tiene las siguientes ventajas:
simple y
de alto rendimiento, lo que evita la sobrecarga frecuente de cambios de subproceso y
el uso reducido de recursos. Debido a que es de un solo subproceso, el uso de memoria sigue siendo muy bajo en condiciones de carga pesada
. -seguro, sin bloqueo, ¿cómo resolver problemas de alta concurrencia como desbloqueo y punto muerto
?
Node utiliza IO asíncrona y controlada por eventos (función de devolución de llamada) para resolver el problema de la alta concurrencia.
En términos generales, las soluciones de alta concurrencia proporcionarán un modelo de subprocesos múltiples, proporcionando un subproceso para cada lógica de negocios y compensando la sobrecarga de tiempo de las llamadas de E/S sincrónicas mediante el cambio de subprocesos del sistema. Al igual que Apache, hay un hilo por solicitud.
NodeJS utiliza un modelo de subproceso único y utiliza métodos de solicitud asincrónicos para todas las E/S para evitar cambios frecuentes de contexto. Mantiene una cola de eventos cuando se ejecuta NodeJS cuando se ejecuta, ingresa al bucle de eventos y espera a que llegue el siguiente evento. , cada solicitud de E/S asincrónica se enviará a la cola de eventos para su ejecución una vez completada.
El mecanismo asincrónico de NodeJS se basa en eventos. Todas las consultas de E/S, comunicación de red y bases de datos se ejecutan sin bloqueo y los resultados devueltos son procesados por el bucle de eventos . Como se muestra en la imagen:
El proceso de Node.js solo procesará un evento a la vez. Una vez completado, ingresará inmediatamente al bucle de eventos para verificar los eventos posteriores. La ventaja de esto es que la CPU y la memoria pueden concentrarse en procesar una cosa al mismo tiempo, mientras intentan permitir que las operaciones de E/S que consumen mucho tiempo y otras operaciones se ejecuten en paralelo. Para ataques de conexión de baja velocidad, Node.js solo agrega solicitudes a la cola de eventos y espera la respuesta del sistema operativo. Por lo tanto, no hay una sobrecarga de subprocesos múltiples, lo que puede mejorar en gran medida la solidez de las aplicaciones web y prevenir ataques maliciosos.
Mecanismo de bucle de eventos
El llamado bucle de eventos significa que NodeJS utilizará el mecanismo de eventos para resolver todas las operaciones asincrónicas. Hay un hilo que se repite continuamente para detectar la cola de eventos.
Toda la lógica en NodeJS es una función de devolución de llamada de evento, por lo que NodeJS siempre está en el bucle de eventos y la entrada del programa es la función de devolución de llamada del primer evento en el bucle de eventos. La función de devolución de llamada de eventos puede emitir una solicitud de E/S o emitir directamente el evento y regresar al bucle de eventos después de la ejecución. El bucle de eventos comprueba la cola de eventos en busca de eventos no controlados hasta que finaliza el programa. El bucle de eventos de NodeJS es invisible para los desarrolladores y lo implementa la biblioteca libev. libev comprueba constantemente si hay detectores de eventos activos que puedan detectarse y no sale del bucle de eventos hasta que no se detectan detectores de eventos y el programa finaliza.