¿Es realmente NodeJS Single-Threaded?

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 callback 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 locking 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?

NodeJS tiene ventaja (segunda línea del sitio web ), 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.

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

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

Nodo utiliza el motor V8 para concurrencia.