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 qui n'exécute aucun code supplémentaire dans votre processus de nœud. Vous pouvez ajouter des écouteurs pour le processus que vous avez généré, pour permettre à votre code d'interagir avec le processus généré, mais aucune nouvelle instance V8 n'est créée (à moins bien sûr que votre commande soit une autre commande 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 nœuds de calcul, s'exécutant exactement sur la même base de code de nœud, ou peut-être un module différent pour une tâche spécifique. Ceci est très utile pour créer un pool de nœuds de calcul. Alors que le modèle d'événement asynchrone d'un nœud permet d'utiliser assez efficacement un seul cœur d'une machine, il ne permet pas à un processus de nœud d'utiliser des machines multicœurs. Le moyen le plus simple d'y parvenir est d'exécuter plusieurs copies du même programme sur un seul processeur.
Une bonne règle de base est un à deux processus de nœud par cœur, peut-être plus pour les machines avec un bon rapport horloge RAM / horloge processeur, ou pour les processus de nœud lourds en E / S et légers en travail CPU, afin de minimiser le temps d'arrêt de l'événement. loop attend de nouveaux événements. Cependant, cette dernière suggestion est une micro-optimisation et nécessiterait une analyse comparative minutieuse pour s'assurer que votre situation correspond au besoin de nombreux processus / cœur. Vous pouvez en fait réduire les performances en générant trop de nœuds de calcul pour votre machine / scénario.
En fin de compte, vous pouvez utiliser spawn d'une manière qui a fait ce qui précède, en envoyant spawn une commande Node. Mais ce serait idiot, car fork fait certaines choses pour optimiser le processus de création d'instances V8. Pour être clair, ce spawn englobe la fourche. Fork est tout simplement 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
var child = require('child_process').fork('child.js');
par exemple sur mon application principale, j'aurai maintenant 2 cœurs séparés en cours d'exécution. Si je devais exécuter une boucle for lourde dans le child.js (processus), j'utiliserais essentiellement plus de cœurs pour alimenter child.js, non? Cette utilisation du processeur affecterait-elle le cœur de mon application principale?