web-dev-qa-db-fra.com

Processus fils node.js - Différence entre spawn et fork

Cela peut sembler une question de base, mais je n’ai trouvé aucune documentation:

Quelle est la différence entre forger et générer un processus node.js? J'ai lu que la falsification est un cas particulier de frai, mais quels sont les différents cas d'utilisation/répétitions pour utiliser chacun d'entre eux?

126
Hitesh

Spawn est une commande conçue pour exécuter des commandes système. Lorsque vous exécutez spawn, vous lui envoyez une commande système qui sera exécutée sur son propre processus, mais n'exécutera aucun code supplémentaire dans votre processus de nœud. Vous pouvez ajouter des écouteurs pour le processus que vous avez créé, afin de permettre à votre code d'interagir avec le processus généré, mais aucune nouvelle instance V8 n'est créée (à moins que votre commande ne soit bien sûr une autre Node, mais Dans ce cas, vous devez utiliser fork!) et une seule copie de votre module de nœud est active sur le processeur.

Fork est une instance spéciale de spawn, qui exécute une nouvelle instance du moteur V8. Cela signifie que vous pouvez essentiellement créer plusieurs postes de travail, en exécutant exactement la même base Node, ou peut-être un module différent pour une tâche spécifique. Ceci est très utile pour la création d'un pool de postes de travail. While async du noeud Le modèle d'événement permet à un seul noyau d'une machine d'être utilisé assez efficacement, il ne permet pas à un processus de nœud d'utiliser des machines à plusieurs coeurs. Le moyen le plus simple de le faire consiste à exécuter plusieurs copies du même programme, sur un même processeur. .

Une bonne règle est un à deux processus de nœud par cœur, peut-être davantage pour les machines avec un bon rapport d'horloge RAM/cpu, ou pour les processus de nœud très chargés en E/S et nécessitant peu de travail de la part du processeur, afin de minimiser le temps d'immobilisation de l'événement La boucle attend de nouveaux événements. Toutefois, cette dernière suggestion est une micro-optimisation et nécessiterait une analyse comparative minutieuse afin de s’assurer que votre situation convient au besoin de nombreux processus/noyaux. Vous pouvez réellement réduire les performances en générant trop de travailleurs pour votre machine/scénario.

En fin de compte, vous pourriez utiliser spawn de la même manière, en envoyant à spawn une commande Node. Mais ce serait idiot, car fork permet d'optimiser le processus de création d'instances V8. il est donc tout à fait optimal pour ce cas d’utilisation particulier et très utile.

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

193
ChrisCM
  • spawn - child_process.spawn lance un nouveau processus avec une commande donnée.
  • fork - La méthode child_process.fork est un cas particulier de la méthode spawn () pour créer des processus enfants.

La méthode spawn ()

la méthode child_process.spawn lance un nouveau processus avec une commande donnée. Il a la signature suivante -

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

En savoir plus sur options

La méthode spawn () renvoie des flux (stdout et stderr) et doit être utilisée lorsque le processus renvoie une quantité de données en volume. spawn () commence à recevoir la réponse dès que le processus commence à s'exécuter.

La méthode fork ()

child_process.fork est un cas particulier de spawn () () pour créer Node traite. Il a la signature suivante -

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

La méthode fork renvoie un objet avec un canal de communication intégré en plus de disposer de toutes les méthodes dans une instance normale de ChildProcess.

4
Igor Litvinovich

TLDR

Spawn

Lorsqu'un spawn est créé - Il crée un interface de diffusion en contin entre les processus parent et enfant.

interface de transmission en continu signifie - mettre en mémoire tampon les données au format binaire

fourchette

Quand un fork est créé - Il crée un canal de communication entre les processus parent et enfant

canal de communication signifie - messagerie

Différence

Bien les deux ressemblent à faire le même transfert de données, sauf en dessous de la différence

spawn sera utile si vous voulez faire type d'opération continue comme les données en lecture/écriture dans le flux

fork sera utile si vous voulez faire messagerie

Conslusion

spawn doit être utilisé pour diffusion en contin big data/fichiers/images FROM spawn processus TO parent processus

fork devrait être utilisé pour la messagerie.

  • Par exemple Supposons que 10 processus fork soient créés à partir du parent.
  • et chaque processus effectue une opération
  • et chaque processus à la fin de l'opération envoie un message au parent ' processus n ° 4 terminé ', ' processus no. 8 fait '
1
vijay