tick started nodejs node nexttick loop getting for eventloop event dummies multithreading architecture node.js

multithreading - started - ¿Es realmente NodeJS Single-Threaded?



nodejs main loop (3)

JavaScript tiene un solo subproceso, por lo que es un modelo de evento. Pero la pila de nodos no es de un solo subproceso.

Nodo utiliza el motor V8 para concurrencia.

Node.js resuelve "Un subproceso por problema de conexión" colocando el modelo basado en eventos en su núcleo, utilizando un bucle de evento en lugar de subprocesos. Todas las costosas operaciones de E / S siempre se ejecutan de forma asíncrona con una devolución de llamada que se ejecuta cuando finaliza la operación iniciada.

La observación IF cualquier operación ocupada es manejada por mecanismos de multiplexación como epoll ().

Mi pregunta es ahora:

  • ¿Por qué Block NodeJS durante el uso del sistema de bloqueo llama a / epoll / kqueue?

  • O no es NodeJS Single Threaded en absoluto, por lo que un segundo hilo es
    necesario para observar todas las operaciones de E / S con select / epoll / kqueue?


No.

Cuando se inician las operaciones de E / S, se delegan en libuv , que gestiona la solicitud utilizando su propio entorno (multiproceso, asíncrono). libuv anuncia la finalización de las operaciones de E / S, lo que permite que las devoluciones de llamada que esperan en este evento sean reintroducidas en la secuencia principal de V8 para su ejecución.

V8 -> Delegar E / S ( libuv ) -> Grupo de subprocesos -> Asincrono multiproceso


NodeJS tiene ventaja (segunda línea del website ), no de un solo subproceso. Maneja internamente el subprocesamiento necesario para hacer el manejo select / epoll / kqueue sin que el usuario tenga que administrarlo explícitamente, pero eso no significa que no haya uso de subprocesos dentro de él.