2017-01-21 18 views
0

聽我有一些很難理解這段代碼:集羣的NodeJS模塊 - 它是如何工作的,而在插座

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

if (cluster.isMaster) { 
    console.log(`Master ${process.pid} is running`); 

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

    cluster.on('exit', (worker, code, signal) => { 
    console.log(`worker ${worker.process.pid} died`); 
    }); 
} else { 
    // Workers can share any TCP connection 
    // In this case it is an HTTP server 
    http.createServer((req, res) => { 
    res.writeHead(200); 
    res.end('hello world\n'); 
    }).listen(8000); 

    console.log(`Worker ${process.pid} started`); 
} 

我不明白家長和工作人員之間的關係。父進程生成子進程並等待它們,但工作負載如何分配(子進程)

如何將多進程綁定到子進程中的同一個端口?

回答

2

我不確定您是否閱讀過此內容。有一個美麗的解釋。
https://nodejs.org/dist/latest-v6.x/docs/api/cluster.html#cluster_how_it_works
簡單地說,集羣模塊將照顧這。你不必擔心這一點。

多進程未綁定到相同的端口

方法1(輪循方法 - 默認除了在視窗):
萬事達綁定到端口,監聽和接受傳入連接並且它將工作分配給從屬設備,並且通過ipc套接字進行通信
在這裏每個從屬設備都有相同的工作負載機會。

方法2(不平衡的方法):
萬事達綁定到端口(記住,它不接受連接)和聽音插座共享到從屬進程。
現在,奴隸的責任是接受連接並處理請求。
這裏是由底層操作系統來分配跨進程的工作。這是由OS完成的公平調度。如果工作量小,大部分時間都是同一個從事工作的奴隸。