Spawn là một lệnh được thiết kế để chạy các lệnh hệ thống. Khi bạn chạy sinh sản, bạn gửi cho nó một lệnh hệ thống sẽ được chạy trên tiến trình riêng của nó, nhưng không thực thi bất kỳ mã nào nữa trong quy trình nút của bạn. Bạn có thể thêm người nghe cho quy trình bạn đã sinh ra, để cho phép mã của bạn tương tác với quy trình được sinh ra, nhưng không có phiên bản V8 mới nào được tạo ra (trừ khi tất nhiên lệnh của bạn là một lệnh Node khác, nhưng trong trường hợp này bạn nên sử dụng fork!) Và chỉ có một bản sao của mô-đun nút của bạn được kích hoạt trên bộ xử lý.
Fork là một ví dụ đặc biệt của sinh sản, chạy một phiên bản mới của động cơ V8. Có nghĩa là, về cơ bản, bạn có thể tạo nhiều công nhân, chạy trên cùng một cơ sở mã Node chính xác hoặc có thể là một mô-đun khác nhau cho một tác vụ cụ thể. Điều này là hữu ích nhất để tạo ra một nhóm công nhân. Mặc dù mô hình sự kiện không đồng bộ của nút cho phép một lõi của máy được sử dụng khá hiệu quả, nhưng nó không cho phép một quá trình nút sử dụng các máy đa lõi. Cách dễ nhất để thực hiện điều này là chạy nhiều bản sao của cùng một chương trình, trên một bộ xử lý.
Một nguyên tắc nhỏ là một đến hai quy trình nút trên mỗi lõi, có lẽ nhiều hơn cho các máy có tỷ lệ xung nhịp / xung nhịp tốt hoặc cho các nút xử lý nặng trên I / O và làm việc nhẹ với CPU, để giảm thiểu thời gian xảy ra sự kiện vòng lặp đang chờ sự kiện mới. Tuy nhiên, đề xuất sau là tối ưu hóa vi mô và sẽ cần điểm chuẩn cẩn thận để đảm bảo tình huống của bạn phù hợp với nhu cầu của nhiều quy trình / lõi. Bạn thực sự có thể giảm hiệu suất bằng cách sinh ra quá nhiều công nhân cho máy / kịch bản của bạn.
Cuối cùng, bạn có thể sử dụng sinh sản theo cách đã làm như trên, bằng cách gửi sinh sản một lệnh Node. Nhưng điều này sẽ là ngớ ngẩn, bởi vì fork thực hiện một số điều để tối ưu hóa quá trình tạo phiên bản V8. Chỉ cần làm cho nó rõ ràng, cuối cùng sinh sản bao gồm ngã ba. Fork chỉ là tối ưu cho trường hợp sử dụng cụ thể này và rất hữu ích.
http://nodejs.org/api/child_ process.html # child_ process_child_ process_exec_command_options_callback
var child = require('child_process').fork('child.js');
ví dụ như trên ứng dụng chính của mình, bây giờ tôi sẽ có 2 lõi riêng biệt đang chạy. Nếu tôi chạy một vòng lặp for nặng trong child.js (process), về cơ bản tôi sẽ sử dụng nhiều lõi hơn để tăng sức mạnh cho child.js, phải không? Việc sử dụng cpu đó có ảnh hưởng đến lõi ứng dụng chính của tôi không?