返回首页

Node 多进程:cluster 模块

用 cluster 让 Node 跑满多核。

发布 2017年12月07日 标签 #node #concurrency

~/posts/multi-process-node $ cat post.md

/ 语言 EN / 中文
/ 主题 / /

多核机器上 Node 可以靠多进程提升吞吐。Node 自带的 cluster 模块就是干这件事的,API 风格和 C 语言相对接近。

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();
    }

    cluster.on("exit", function (worker, code, signal) {
        console.log(`worker ${worker.process.pid} died`);
    });
} else {
    http.createServer(function (req, res) {
        res.writeHead(200);
        res.end("hello world\n");
    }).listen(8000);
}

逻辑大体可以翻译成 C 语言里的:

int numCPUs = /* num CPUs */;
for (int i = 0; i < numCPUs; i++) {
    if (fork() == 0) {
        // createServer
    }
}

这套已经接到 GHOTI-CLI 里了。

返回首页