前言:几分钟让大家了解服务器的多进程架构和Node.js Cluster模块的原理。
Node.js是单进程的,如何利用多核?
Node.js提供了Cluster模块,Cluster支持多进程的架构,支持轮询和共享两种模式(通过环境变量NODE_CLUSTER_SCHED_POLICY设置或在主进程中设置cluster.schedulingPolicy)。我们看看传统多进程服务器的架构。
1 主进程accept
2 子进程accept
然后我们看看Cluster的使用。
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// 创建子进程
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
http.createServer((req, res) => {
res.writeHead(200);
}).listen(8000);
}
通过cluster.isMaster判断是不是主进程,然后做不同的事情,重点在于listen函数。我看看具体的实现原理。Cluster支持轮询和共享两种模式。对应前面介绍的两种服务器架构。
1 轮询模式
2 共享模式
之前写过node-cluster的库,想了解原理的同学可以参考。
https://github.com/theanarkh/node-cluster