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écute pas d'autre code dans votre processus de nœud. Vous pouvez ajouter des écouteurs pour le processus que vous avez spawné, afin de permettre à votre code d'interagir avec le processus spawné, mais aucune nouvelle instance de V8 n'est créée (à moins bien sûr que votre commande soit une autre commande Node, mais dans ce cas vous devriez utiliser fork !) et une seule copie de votre module node est active sur le processeur.
Fork est une instance spéciale de spawn, qui exécute une nouvelle instance du moteur V8. En d'autres termes, vous pouvez essentiellement créer plusieurs travailleurs, fonctionnant sur la même base de code Node, ou peut-être un module différent pour une tâche spécifique. Ceci est très utile pour créer un pool de travailleurs. Alors que le modèle d'événement asynchrone de Node permet d'utiliser assez efficacement un seul cœur de machine, il ne permet pas à un processus de nœud d'utiliser des machines à plusieurs cœ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 empirique est un à deux processus de nœud par cœur, peut-être plus pour les machines avec un bon ratio horloge RAM/horloge CPU, ou pour les processus de nœud lourds en E/S et légers en travail CPU, pour minimiser le temps d'arrêt de la boucle d'événement en attente de nouveaux événements. Cependant, cette dernière suggestion est une micro-optimisation, et nécessiterait un benchmarking minutieux pour s'assurer que votre situation correspond au besoin de nombreux processus/cœur. Vous pouvez en fait diminuer les performances en créant trop de travailleurs pour votre machine/scénario.
En fin de compte, vous pourriez utiliser spawn d'une manière qui fait ce qui précède, en envoyant à spawn une commande Node. Mais ce serait stupide, car fork fait certaines choses pour optimiser le processus de création des instances V8. Je tiens à préciser qu'en fin de compte, spawn englobe fork. Fork est juste 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