Nếu tôi không nhầm, bạn đang tìm kiếm thứ gì đó dọc theo dòng đa luồng và/hoặc tính toán nhiều thứ cùng một lúc.
Nhiều lần thực hiện cùng một lúc
SIMD đang bắt đầu tìm đường vào Trình duyệt, với triển khai Nút không xa phía sau. Hãy xem node-simd hoặc MDN SIMD (browsers). SIMD vẫn đang thử nghiệm và chỉ hoạt động trên các CPU được hỗ trợ tại thời điểm này (rõ ràng, vì không phải tất cả các CPU đều có chức năng này). Nó thực hiện nhiều việc cùng một lúc, một ví dụ so sánh JS bình thường để SIMD JS sẽ là:
// Normal addition, 4 actions are executed.
var a = [1, 2, 3, 4];
var b = [5, 6, 7, 8];
var c = [];
c[0] = a[0] + b[0];
c[1] = a[1] + b[1];
c[2] = a[2] + b[2];
c[3] = a[3] + b[3];
c; // Array[6, 8, 10, 12]
// SIMD execution - all additions are processed simultaenously through the CPU
var a = SIMD.Float32x4(1, 2, 3, 4);
var b = SIMD.Float32x4(5, 6, 7, 8);
var c = SIMD.Float32x4.add(a,b);
c; // Float32x4[6, 8, 10, 12]
Multithreading
Liên quan đến xử lý đa luồng, webworkers
đã tồn tại trong môi trường trình duyệt trong một thời gian bây giờ. Điều này đã được chuyển đến Node đầy đủ theo thông số HTML như được thấy in this repository.
Dưới đây là good explanation là lý do tại sao webworkers
thậm chí được chuyển đến Nút ở vị trí đầu tiên, vì bạn đã có thể chạy các tiến trình con trong các chủ đề khác và trên các CPU khác với mô-đun child_process
. node-webworker
là một mô-đun tuyệt vời vì mỗi tiến trình được chạy trong ngữ cảnh của nó, và trong quá trình node
riêng của nó, vì vậy nó thực sự đa luồng với nút.
Vì vậy, để chạy các quy trình khác nhau trên các CPU khác nhau, bạn có thể sử dụng node-webworker
hoặc sử dụng child_process
để sinh ra các luồng khác để thực hiện các hành động riêng biệt cùng lúc với các lõi CPU khác nhau. node-webworker
có thể nghe các sự kiện bằng API postMessage
quen thuộc và child_process
sẽ liên lạc qua stdin/stdout/stderr
.
Hy vọng rằng sẽ trả lời câu hỏi của bạn :)
Tôi đã ấn tượng rằng có ít nhất [một cách] (https://www.npmjs.com/package/webworker-threads) để tạo nhiều luồng thực thi có thể chạy đồng thời giao tiếp bằng cách truyền thông điệp tới lẫn nhau. Có phải vậy không? –
@DavidSchwartz, không có bạn là chính xác, phương pháp đó có thể sử dụng 'child_process' và thực hiện thông điệp đi qua với sự kiện' child_process.on ('message') 'trong tiến trình cha và hàm' process.send() 'trong phần tử con quá trình. Tôi cũng muốn giới hạn câu trả lời của tôi cho những gì Node.js cung cấp như là một phần của chức năng cốt lõi của nó chứ không phải những gói có khả năng cung cấp. – peteb