nodejs 如何调用多核cpu? 什么原理?

nodejs 如何调用多核cpu? 什么原理?

阅读 10.9k
7 个回答

一个nodejs进程只能使用一个CPU,要想利用多核CPU,必须启动多个进程。进程之间使用IPC进行通信。
由于自己实现这套逻辑略麻烦,所以Nodejs提供了cluster模块简化多核开发,原理跟之前一样

我没记错的话Nodejs只能支持单核,虽然回调的方式非常优雅,但单核还是一个痛点。

又是看文档没有看明白的!

首先,你需要明白“一个程序至少有一个进程,一个进程至少有一个线程”

node里的JS运行环境确实是单线程的,因为node采用的V8引擎是单线程!

其次,node从0.X.X就支持了child_process,来开启“多进程”,实现多核CPU资源的充分利用!

后来在0.8版本新增了cluster来方便创建和管理node进程集群!

那么我使用cluster开启“多个NODE实例”来实现多进程,从而充分利用多核CPU资源就不矛盾了吧!

大家说的多进程,在哪些应用场景下会用到?自己写node也有一段时间了,好像没有刻意的用到多进程,大家能否举个例子说一下,哪些场景会用到多进程?

推荐一下pm2,可以看一下pm2介绍pm2介绍

// http服务器

var http = require('http');

var fs = require('fs');

var server = http.createServer(function (request ,response) {

console.log('got a request');

fs.readFile('./tmp/cluster.html',function (err,data) {

    if (err) throw  err;

    // const str = buffer(data).toString('utf-8');
    // console.log(data.toString('utf-8'));

    response.write(data.toString('utf-8'));

    response.end();

});

})

server.listen(3000);

// cluster
var cluster = require('cluster');

if (cluster.isMaster){

var cpuCount = require('os').cpus().length;

for(var i = 0 ; i < cpuCount; i ++)
{
    cluster.fork();
}

cluster.on('online',function(workder){

    console.log('workder' + workder.process.pid + 'is online');

})

cluster.on('exit',function (worker,code,signal) {

    console.log('worker' + worker.process.pid + ' with code' + code + ' and signal'+ signal );

    cluster.fork();
});

}else{

require('./clusterhttpserver');

}

写了一个cluster掉多核心,然后,开心的玩了几次,然后,http服务器开始每一次请求,两次输出request,,这个是见鬼了吗?

推荐问题