Node.js chạy ở chế độ đơn luồng, nhưng nó sử dụng mô hình hướng sự kiện để xử lý đồng thời. Nó cũng tạo điều kiện thuận lợi cho việc tạo ra các quy trình con để thúc đẩy quá trình xử lý song song trên các hệ thống dựa trên CPU đa lõi.
Các quy trình con luôn có ba luồng child.stdin, child.stdoutvà child.stderr có thể được chia sẻ với các luồng stdio của quy trình mẹ.
Node cung cấp quy trình_trẻ con mô-đun có ba cách chính sau đây để tạo một quy trình con.
người điều hành – Phương thức child_process.exec chạy một lệnh trong shell / console và đệm đầu ra.
đẻ trứng – child_process.spawn khởi chạy một quy trình mới với một lệnh đã cho.
cái nĩa – Phương thức child_process.fork là một trường hợp đặc biệt của spawn () để tạo các tiến trình con.
Phương thức thực thi ()
Mục lục
Phương thức child_process.exec chạy một lệnh trong trình bao và đệm đầu ra. Nó có chữ ký sau –
child_process.exec(command[, options], callback)
Thông số
Đây là mô tả của các tham số được sử dụng –
yêu cầu (Chuỗi) Lệnh chạy, với các đối số được phân tách bằng dấu cách
tùy chọn (Đối tượng) có thể bao gồm một hoặc nhiều tùy chọn sau:
cwd (Chuỗi) Thư mục làm việc hiện tại của tiến trình con
env (Đối tượng) Các cặp khóa-giá trị môi trường
mã hóa (Chuỗi) (Mặc định: ‘utf8’)
vỏ bọc (Chuỗi) Shell để thực thi lệnh với (Mặc định: ‘/ bin / sh’ trên UNIX, ‘cmd.exe’ trên Windows, Shell phải hiểu công tắc -c trên UNIX hoặc / s / c trên Windows. Trên Windows, phân tích cú pháp dòng lệnh phải tương thích với cmd.exe.)
hết giờ (Số) (Mặc định: 0)
maxBuffer (Số) (Mặc định: 200 * 1024)
killSignal (Chuỗi) (Mặc định: ‘SIGTERM’)
uid (Số) Đặt danh tính người dùng của quy trình.
gid (Số) Đặt danh tính nhóm của quy trình.
gọi lại Hàm nhận ba đối số lỗi, stdout, và stderr được gọi với đầu ra khi quá trình kết thúc.
Phương thức execute () trả về một bộ đệm có kích thước tối đa và đợi quá trình kết thúc và cố gắng trả lại tất cả dữ liệu được lưu trong bộ đệm cùng một lúc.
Thí dụ
Hãy để chúng tôi tạo hai tệp js có tên support.js và master.js –
Tệp: support.js
console.log("Child Process " + process.argv[2] + " executed." );
Tệp: master.js
const fs = require('fs'); const child_process = require('child_process'); for(var i=0; i<3; i++) { var workerProcess = child_process.exec('node support.js '+i,function (error, stdout, stderr) { if (error) { console.log(error.stack); console.log('Error code: '+error.code); console.log('Signal received: '+error.signal); } console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); }); workerProcess.on('exit', function (code) { console.log('Child process exited with exit code '+code); }); }
Bây giờ hãy chạy master.js để xem kết quả –
$ node master.js
Xác minh đầu ra. Máy chủ đã khởi động.
Child process exited with exit code 0 stdout: Child Process 1 executed. stderr: Child process exited with exit code 0 stdout: Child Process 0 executed. stderr: Child process exited with exit code 0 stdout: Child Process 2 executed.
Phương thức spawn ()
Phương thức child_process.spawn khởi chạy một tiến trình mới với một lệnh đã cho. Nó có chữ ký sau –
child_process.spawn(command[, args][, options])
Thông số
Đây là mô tả của các tham số được sử dụng –
yêu cầu (Chuỗi) Lệnh chạy
args (Mảng) Danh sách các đối số chuỗi
tùy chọn (Đối tượng) có thể bao gồm một hoặc nhiều tùy chọn sau:
cwd (Chuỗi) Thư mục làm việc hiện tại của tiến trình con.
env (Đối tượng) Các cặp khóa-giá trị của môi trường.
stdio (Mảng) Cấu hình stdio của String Child.
customFds (Mảng) Bộ mô tả tệp không được chấp nhận để con sử dụng cho stdio.
tách ra (Boolean) Đứa trẻ sẽ là trưởng nhóm quy trình.
uid (Số) Đặt danh tính người dùng của quy trình.
gid (Số) Đặt danh tính nhóm của quy trình.
Phương thức spawn () trả về các luồng (stdout & stderr) và nó sẽ được sử dụng khi quá trình trả về một lượng lớn dữ liệu. spawn () bắt đầu nhận phản hồi ngay khi tiến trình bắt đầu thực thi.
Thí dụ
Tạo hai tệp js có tên support.js và master.js –
Tệp: support.js
console.log("Child Process " + process.argv[2] + " executed." );
Tệp: master.js
const fs = require('fs'); const child_process = require('child_process'); for(var i = 0; i<3; i++) { var workerProcess = child_process.spawn('node', ['support.js', i]); workerProcess.stdout.on('data', function (data) { console.log('stdout: ' + data); }); workerProcess.stderr.on('data', function (data) { console.log('stderr: ' + data); }); workerProcess.on('close', function (code) { console.log('child process exited with code ' + code); }); }
Bây giờ hãy chạy master.js để xem kết quả –
$ node master.js
Xác minh đầu ra. Máy chủ đã khởi động
stdout: Child Process 0 executed. child process exited with code 0 stdout: Child Process 1 executed. stdout: Child Process 2 executed. child process exited with code 0 child process exited with code 0
Phương thức fork ()
Phương thức child_process.fork là một trường hợp đặc biệt của spawn () để tạo các tiến trình Node. Nó có chữ ký sau –
child_process.fork(modulePath[, args][, options])
Thông số
Đây là mô tả của các tham số được sử dụng –
modulePath (Chuỗi) Mô-đun chạy trong con.
args (Mảng) Danh sách các đối số chuỗi
tùy chọn (Đối tượng) có thể bao gồm một hoặc nhiều tùy chọn sau:
cwd (Chuỗi) Thư mục làm việc hiện tại của tiến trình con.
env (Đối tượng) Các cặp khóa-giá trị của môi trường.
thi hành (Chuỗi) Thực thi được sử dụng để tạo tiến trình con.
executeArgv (Mảng) Danh sách các đối số chuỗi được truyền cho tệp thực thi (Mặc định: process.execArgv).
im lặng (Boolean) Nếu đúng, stdin, stdout và stderr của con sẽ được chuyển đến cha mẹ, nếu không chúng sẽ được thừa kế từ cha mẹ, hãy xem các tùy chọn “pipe” và “inherit” cho stdio của spawn () để biết thêm chi tiết (mặc định là sai).
uid (Số) Đặt danh tính người dùng của quy trình.
gid (Số) Đặt danh tính nhóm của quy trình.
Phương thức fork trả về một đối tượng có kênh giao tiếp tích hợp ngoài việc có tất cả các phương thức trong một phiên bản ChildProcess bình thường.
Thí dụ
Tạo hai tệp js có tên support.js và master.js –
Tệp: support.js
console.log("Child Process " + process.argv[2] + " executed." );
Tệp: master.js
const fs = require('fs'); const child_process = require('child_process'); for(var i=0; i<3; i++) { var worker_process = child_process.fork("support.js", [i]); worker_process.on('close', function (code) { console.log('child process exited with code ' + code); }); }
Bây giờ hãy chạy master.js để xem kết quả –
$ node master.js
Xác minh đầu ra. Máy chủ đã khởi động.
Child Process 0 executed. Child Process 1 executed. Child Process 2 executed. child process exited with code 0 child process exited with code 0 child process exited with code 0