优速网站建设,个人使用网站,中山软件开发项目管理,牡丹江百度推广Nodejs的主进程是单线程的#xff0c;但它有多线程处理⽅案#xff08;更准备来说是多进程⽅案#xff09;#xff0c;即主进程开启不同的⼦进程#xff0c;主进程接收所有请求#xff0c;然后将分发给其它不同的nodejs⼦进程处理。 它⼀般有两种实现#xff1a; 1. 主进…Nodejs的主进程是单线程的但它有多线程处理⽅案更准备来说是多进程⽅案即主进程开启不同的⼦进程主进程接收所有请求然后将分发给其它不同的nodejs⼦进程处理。 它⼀般有两种实现 1. 主进程监听⼀个端⼝⼦进程不监听端⼝通过主进程分发请求到⼦进程 2. 主进程和⼦进程分别监听不同端⼝通过主进程分发请求到⼦进程。 cluster模式的⽤的就是第⼀种实现它使⽤⼀个主线程和多个⼦线程形成⼀个集群通过主线程来向⼦线程分发请求。
在Node.js中您可以使用Cluster模块来配置多CPU。Cluster模块允许您创建多个子进程每个子进程都运行在独立的CPU上从而提高应用程序的性能。
以下是一个使用Cluster模块配置多CPU的示例
const cluster require(cluster); const http require(http); const numCPUs require(os).cpus().length; if (cluster.isMaster) { console.log(主进程 ${process.pid} 正在运行); // 循环创建工作进程 for (let i 0; i numCPUs; i) { cluster.fork(); } cluster.on(exit, (worker, code, signal) { console.log(工作进程 ${worker.process.pid} 已退出); }); } else { // 工作进程可以共享任何TCP连接。在此示例中我们将共享一个HTTP服务器。 http.createServer((req, res) { res.writeHead(200); res.end(你好世界\n); }).listen(8000); console.log(工作进程 ${process.pid} 已启动); }
为什么我们在主进程代码块以及⼦进程代码块之外来声明的变量不应该是全局变量么答案是否定的。因为每个进程在内存都有各⾃的区域因此data操作是在各⾃的区域内进⾏的也就是说变量data没被共享。那么怎么来在各进程之间共享数据呢来看下⾯的代码
var cluster require(cluster);
var http require(http);
if (cluster.isMaster) {
var numCPUs require(os).cpus().length;
var data 0;
// 启动多个进程.
for (var i 0; i numCPUs; i) {
//增加⼀个进程
var worker_process cluster.fork();
//侦听⼦进程的message事件
worker_process.on(message, function(msg) {
if (msg.cmd msg.cmd notifyRequest) {
data;
console.log(DATA VALUE : %d , data);
}
});
}
} else {
process.send({ cmd: notifyRequest });
}