Si entiendo correctamente, el nodo JS no está bloqueando ... así que en lugar de esperar una respuesta de una base de datos u otro proceso, pasó a otra cosa y vuelve a comprobarlo más tarde.
También es de un solo hilo.
Entonces, todo esto significa que un proceso de Nodo JS determinado puede utilizar de manera completa y eficiente un solo núcleo de CPU, pero no utilizará ningún otro núcleo en la máquina, ya que nunca usará más de uno a la vez.
Esto, por supuesto, significa que las otras CPU aún pueden ser utilizadas por otros procesos para cosas como la base de datos SQL u otras subrutinas pesadas de CPU intencionalmente separadas siempre que sean un proceso separado.
También en el caso de que el proceso Node JS tenga un bucle sin fin o una función de ejecución prolongada, ese proceso ya no es útil de ninguna manera hasta que se detenga el bucle sin fin o la función de ejecución prolongada (o se cancele todo el proceso).
¿Todo esto está bien? ¿Estoy correcto en mi entendimiento?
fuente
Respuestas:
Bastante correcto, sí. El servidor node.js tiene un grupo de subprocesos interno para que pueda realizar operaciones de bloqueo y notificar al subproceso principal con una devolución de llamada o evento cuando las cosas se completen.
Así que me imagino que hará un uso limitado de otro núcleo para el grupo de subprocesos, por ejemplo, si realiza una lectura del sistema de archivos sin bloqueo, esto probablemente se implemente diciéndole a un subproceso del grupo de subprocesos que realice una lectura y establezca una devolución de llamada cuando está hecho, lo que significa que la lectura podría estar ocurriendo en un subproceso / núcleo diferente mientras el programa principal node.js está haciendo otra cosa.
Pero desde el punto de vista de node.js, es completamente único y no usará directamente más de un núcleo.
fuente
Sí, diría que tu comprensión es completamente correcta. Este artículo ( archivado ) explica bastante bien la lógica detrás de este diseño. Este es probablemente el párrafo más importante:
fuente
Incluso si este es un hilo viejo, pensé, que compartiría con una idea, cómo utilizar más de un núcleo en la aplicación Node.JS. Como Nuray Altin ha mencionado, JXcore puede hacer eso.
Ejemplo simple:
Por defecto, hay dos hilos (puede cambiarlo con
jxcore.tasks.setThreadCount()
)Por supuesto, hay mucho más que puedes hacer con las tareas. Los documentos están aquí .
Pocos artículos sobre ese tema:
fuente
Desde esta pregunta hace casi 2 años. Las cosas se están volviendo diferentes o hay enfoques alternativos para el problema de subprocesos múltiples en Node.JS
De acuerdo con la siguiente publicación de blog, utilizando la extensión de 'tarea' entrante, algunos pueden beneficiarse de otros núcleos disponibles directamente.
http://oguzbastemur.blogspot.com/2013/12/multithread-nodejs.html
fuente
Node.js es una aplicación de subproceso único, pero puede admitir concurrencia a través del concepto de evento y devoluciones de llamada. Aquí hay un video de Philip Roberts que explica cómo funcionan los bucles de eventos en JavaScript.
Haga clic aquí para ver el video
(En lugar de WebAPI, hay API de C ++ en Node.js)
fuente