Saltar al contenido

Proceso hijo de node.js: diferencia entre spawn y fork

Solución:

Spawn es un comando diseñado para ejecutar comandos del sistema. Cuando ejecuta spawn, le envía un comando del sistema que se ejecutará en su propio proceso, pero no ejecutará ningún código adicional dentro de su proceso de nodo. Puede agregar oyentes para el proceso que ha generado, para permitir que su código interactúe con el proceso generado, pero no se crea una nueva instancia V8 (a menos que, por supuesto, su comando sea otro comando de Nodo, ¡pero en este caso debe usar fork!) Y solo una copia de su módulo de nodo está activa en el procesador.

Fork es una instancia especial de spawn, que ejecuta una instancia nueva del motor V8. Es decir, esencialmente puede crear varios trabajadores, que se ejecutan exactamente en la misma base de código de nodo, o quizás un módulo diferente para una tarea específica. Esto es más útil para crear un grupo de trabajadores. Si bien el modelo de eventos asíncronos de node permite que un solo núcleo de una máquina se use de manera bastante eficiente, no permite que un proceso de nodo haga uso de máquinas de múltiples núcleos. La forma más sencilla de lograr esto es ejecutar varias copias del mismo programa, en un solo procesador.

Una buena regla general es uno o dos procesos de nodo por núcleo, quizás más para máquinas con una buena relación de reloj de RAM / reloj de CPU, o para procesos de nodo con mucha E / S y poco trabajo de CPU, para minimizar el tiempo de inactividad del evento. bucle está esperando nuevos eventos. Sin embargo, la última sugerencia es una microoptimización y necesitaría una evaluación comparativa cuidadosa para garantizar que su situación se adapte a la necesidad de muchos procesos / núcleos. De hecho, puede disminuir el rendimiento generando demasiados trabajadores para su máquina / escenario.

En última instancia, podría usar spawn de una manera que hiciera lo anterior, enviando a spawn un comando de nodo. Pero esto sería una tontería, porque fork hace algunas cosas para optimizar el proceso de creación de instancias V8. Dejando en claro que, en última instancia, el engendro abarca la bifurcación. Fork es óptimo para este caso de uso particular y muy útil.

http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

TLDR

Spawn

Cuando una Aparecer es creado
Crea un interfaz de transmisión entre el proceso padre e hijo.

medios de interfaz de transmisión – almacenamiento en búfer de datos en formato binario en ONE TIME

Fork

Cuando una tenedor es creado Crea un canal de comunicación entre el proceso padre e hijo

medios de canal de comunicación – mensajería

Difference

Bueno, ambos parecen estar haciendo misma transferencia de datos, Excepto por debajo de la diferencia

Aparecer será útil cuando quieras hacer búfer de datos continuo en formato binario / codificado , Por ejemplo: transfiera un archivo de video de 1gb, una imagen, archivos de registro en ONE TIME

tenedor será útil cuando quieras hacer mensajería
P.ej – JSON o XML mensajería de datos

Conslusion

Aparecer debe usarse para transmisión big data / archivos / imágenes DE Aparecer proceso A padre proceso

tenedor debe usarse para hacer mensajería Json / Xml.

  • P.ej supongamos que se crean 10 procesos de bifurcación a partir del padre.
  • y cada proceso realiza alguna operación
  • y cada proceso al completar la operación enviará un mensaje a los padres ‘proceso no 4 hecho‘,’proceso no 8 hecho

  • Aparecerchild_process.spawn lanza un nuevo proceso con un comando dado.
  • tenedor – el child_process.fork El método es un caso especial del Aparecer() para crear procesos secundarios.

El método spawn ()

El método child_process.spawn lanza un nuevo proceso con un comando dado. Tiene la siguiente firma:

child_process.spawn(command[, args][, options])

Leer más sobre opciones

El método spawn () devuelve flujos (stdout y stderr) y debe usarse cuando el proceso devuelve una gran cantidad de datos. spawn () comienza a recibir la respuesta tan pronto como el proceso comienza a ejecutarse.

El método fork ()

child_process.fork El método es un caso especial de Aparecer() para crear procesos de nodo. Tiene la siguiente firma:

 child_process.fork(modulePath[, args][, options])

El método fork devuelve un objeto con un canal de comunicación incorporado además de tener todos los métodos en una instancia ChildProcess normal.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *