Spawn to polecenie przeznaczone do uruchamiania poleceń systemowych. Po uruchomieniu spawn wysyłasz mu polecenie systemowe, które zostanie uruchomione we własnym procesie, ale nie będzie wykonywać żadnego dalszego kodu w procesie węzła. Możesz dodać detektory dla procesu, który utworzyłeś, aby umożliwić interakcję kodu z zwołanym procesem, ale nie zostanie utworzona żadna nowa instancja V8 (chyba że twoja komenda jest kolejną komendą węzła, ale w tym przypadku powinieneś użyć fork!) I tylko jedna kopia modułu węzła jest aktywna na procesorze.
Fork to specjalna instancja spawn, która uruchamia nową instancję silnika V8. Oznacza to, że zasadniczo można utworzyć wielu pracowników działających na tej samej bazie kodu węzła lub być może na innym module do określonego zadania. Jest to najbardziej przydatne do tworzenia puli pracowników. Chociaż model zdarzeń asynchronicznych węzła umożliwia dość wydajne wykorzystanie pojedynczego rdzenia maszyny, nie pozwala procesowi węzła na korzystanie z maszyn wielordzeniowych. Najłatwiejszym sposobem osiągnięcia tego jest uruchomienie wielu kopii tego samego programu na jednym procesorze.
Dobrą zasadą jest jeden do dwóch procesów węzłowych na rdzeń, być może więcej w przypadku maszyn z dobrym współczynnikiem zegara pamięci RAM / procesora lub w przypadku procesów węzłowych obciążonych we / wy i niewielkim obciążeniem procesora, aby zminimalizować czas przestoju zdarzenia pętla czeka na nowe zdarzenia. Jednak ta ostatnia sugestia jest mikrooptymalizacją i wymagałaby starannej analizy porównawczej, aby upewnić się, że Twoja sytuacja odpowiada potrzebom wielu procesów / rdzenia. W rzeczywistości możesz zmniejszyć wydajność, tworząc zbyt wielu pracowników dla swojej maszyny / scenariusza.
Ostatecznie możesz użyć spawn w sposób, który zrobił to powyżej, wysyłając spawn polecenie Node. Ale to byłoby głupie, ponieważ fork robi pewne rzeczy, aby zoptymalizować proces tworzenia instancji V8. Po prostu wyjaśniam, że ostatecznie spawn obejmuje widelec. Widelec jest optymalny dla tego konkretnego i bardzo użytecznego przypadku użycia.
http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback
var child = require('child_process').fork('child.js');
na przykład w mojej głównej aplikacji, będę miał teraz uruchomione 2 oddzielne rdzenie. Gdybym uruchomić ciężki dla pętli w child.js (procesu), bym zasadniczo być wykorzystanie więcej rdzeni do child.js mocy, prawda? Czy to użycie procesora wpłynęłoby jednak na mój główny rdzeń aplikacji?