nodejs 如何调用多核cpu? 什么原理?
又是看文档没有看明白的!
首先,你需要明白“一个程序至少有一个进程,一个进程至少有一个线程”
node里的JS运行环境确实是单线程的,因为node采用的V8引擎是单线程!
其次,node从0.X.X就支持了child_process,来开启“多进程”,实现多核CPU资源的充分利用!
后来在0.8版本新增了cluster来方便创建和管理node进程集群!
那么我使用cluster开启“多个NODE实例”来实现多进程,从而充分利用多核CPU资源就不矛盾了吧!
// 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,,这个是见鬼了吗?
3 回答2.5k 阅读✓ 已解决
5 回答2.5k 阅读
1 回答848 阅读✓ 已解决
2 回答1.1k 阅读
2 回答1.6k 阅读
2 回答527 阅读✓ 已解决
1 回答695 阅读✓ 已解决
一个nodejs进程只能使用一个CPU,要想利用多核CPU,必须启动多个进程。进程之间使用IPC进行通信。
由于自己实现这套逻辑略麻烦,所以Nodejs提供了
cluster
模块简化多核开发,原理跟之前一样