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?
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
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.
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.
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.