2011-11-06 35 views
7

Câu hỏi của tôi khá đơn giản. mặc dù, nó có thể yêu cầu biến khác nhau để được trả lời (tôi đoán)Có bao nhiêu child_processes tôi nên fork() trong node.js?

Tôi đang chơi xung quanh với node.js và tôi đang nghĩ về cách sử dụng nó trong kiến ​​trúc đa lõi.

Phiên bản mới nhất cung cấp các phương pháp child_process.fork()child.spawn() cho lập trình đa quy trình. Tôi đã đọc trên this bài viết rất hay (nhưng ngày) về việc sử dụng Node.js như một máy chủ Comet quy mô lớn. Bây giờ thì nodejs cung cấp lập trình đa tiến trình, tôi thực sự không có ý tưởng về việc có bao nhiêu tiến trình cần phải sinh ra để phục vụ số lượng lớn yêu cầu (giả sử máy chủ của tôi đang chạy trên một máy). Có cách nào để chọn số lượng 'tốt nhất' (hoặc ít nhất số tốt) số quy trình con thực hiện cùng một công việc không?

Bất kỳ liên kết nào đến hướng dẫn bắt đầu sẽ rất được đánh giá cao.

Cảm ơn bạn

Trả lời

9

Các Node.js tài liệu chính thức có một ví dụ về cách sử dụng cụm:

var cluster = require('cluster'); 
var http = require('http'); 
var numCPUs = require('os').cpus().length; 

if (cluster.isMaster) { 
    // Fork workers. 
    for (var i = 0; i < numCPUs; i++) { 
    cluster.fork(); 
    } 

    cluster.on('death', function(worker) { 
    console.log('worker ' + worker.pid + ' died'); 
    }); 
} else { 
    // Worker processes have a http server. 
    http.Server(function(req, res) { 
    res.writeHead(200); 
    res.end("hello world\n"); 
    }).listen(8000); 
} 

Như bạn có thể thấy trong đoạn mã trên, bạn nên sử dụng càng nhiều dĩa như số của cpus bạn có, để tất cả các lõi hoạt động cùng một lúc (phân phối công việc giữa các nhân xử lý của bạn).

+1

cảm ơn bạn :) không thấy đoạn này trong nodejs doc :) – ArtoAle

+0

Không sao, bạn có thể tìm thấy tại đây: http://nodejs.org/docs/v0.6.0/api/cluster.html – alessioalex

+0

Có , Tôi đang xem xét kỹ hơn API chính thức ngay bây giờ! – ArtoAle

4

Trong ví dụ Node.js, chúng muốn mỗi lõi chỉ chạy một quy trình duy nhất. Không có giới hạn kỹ thuật về số lượng công nhân trên mỗi lõi, vì vậy bạn có thể chạy bao nhiêu lần miễn là bạn có thể xử lý được systerm của mình.

Tuy nhiên, chạy nhiều quá trình trên mỗi lõi không cải thiện hiệu suất của ứng dụng.

hy vọng điều đó sẽ hữu ích!

+0

Liệu Node có chạy mỗi ngã ba trên một lõi khác nhau sau đó (lên đến lõi tối đa)? –

+0

nếu u có 2 lõi chẳng hạn, u sẽ có 2 nhánh và trong mỗi ngã ba, sẽ có 1 nút ứng dụng. –

Các vấn đề liên quan