美文网首页
node 多进程学习

node 多进程学习

作者: ysp123 | 来源:发表于2019-03-19 17:29 被阅读0次

node是基于v8引擎单线程运行,这的单线程运行指的是JavaScript代码在单线程上运行,node还有其他的线程,比如进行异步IO操作的IO线程。这种单线程模型带来的好处就是系统调度过程中不会频繁进行上下文切换,提升了单核CPU的利用率。
node的单程运行无法利用cpu多核,一个node进程只能利用一个cpu。单线程模式下一旦代码崩溃,就是整个程序崩溃,通常解决方案就是使用Node的cluster模块,通过master-worker模式启用多个进程实例。

1、理解node如何创建子进程
node提供了产生进程的方式 --- 派生(fork),引用 child_process 模块。它主要是执行在一个单独的处理器上运行另外一个V8引擎实例中的Node.js模块代码。可以用派生来并行运行多个服务。
fork(modulePath,[args],[options])对象也是返回一个ChildProcess对象。
参数:

         modulePath:字符串,指定被新的Node.js实例启动的JavaScript文件路径。
            args:数组,指定传递给node命令的命令行参数。
            options:参数对象,指定执行命令时使用的设置。

事件:

    Child.on('message', function(){})父进程绑定消息事件,Process.on('message', function(){})是子进程绑定消息事件。
    Child.send()父进程向子进程发送消息,Process.send()是子进程向父进程发送消息。

示列:

//fork.js
const path = require('path');
const child = require('child_processs');

const childrens = child .fork(path.join(__dirname, 'worker.js'));
childrens .on('message', (msg) => {
  console.log(msg);
});
childrens .send('msg from master');

//worker.js
process.on('message', (msg)=>{
    console.log(msg);
});
process.send('message from child');

2、node多进程(cluster模块)
cluster模块,用于多核CPU环境下多进程的负载均衡。利用该模块可以很容易的创建共享同一端口的子进程服务器。

//服务
const cluster = require('cluster');
const cpuNum = require('os').cpus().length;
const http = require('http');

if(cluster.isMaster){
        console.log(`master is start ${process.pid}`);
        
        for(let i=0;i<cpuNum;i++){
                cluster.fork();
        }
}else{
      http.createServer((req, res)=>{
            res.end('response from woker ${process.pid}');
      }).listen(8080);
      console.log(`worker ${process.pid} started`);
}

//http模拟
var http = require('http');
var options = {port: '3000'};

function sendRequest(){
    http.request(options, function(response){
        var serverData = '';
        response.on('data', function(chunk){
            serverData += chunk;
        });
        response.on('end', function(){
            console.log(serverData);
        });
    }).end();
}
for(var i=0;i<15;i++){
   console.log("Sending Request");
    sendRequest();
}

相关文章

  • react-native其他速记

    grep node 查看node进程 pkil -9 node 杀掉node进程 homebrew watchma...

  • node 多进程学习

    node是基于v8引擎单线程运行,这的单线程运行指的是JavaScript代码在单线程上运行,node还有其他的线...

  • 偶尔用到的linux命令

    查看node进程 关掉进程

  • 5分钟node多进程模型从入门到精通

    node进程学习指北 1. 进程与线程 进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动...

  • child_process

    目录 进程 线程 Node.js的进程控制 Node.js的线程控制 进程 Process 场景 notepad....

  • 服务器端常用命令记录(纯属自己所需,他人仅供参考)

    ps aux | grep node (node为进程名) kill 2968 (2968为进程号) “ok,已终...

  • Node进程

    Nodejs是单线程的,单线程好处是程序状态是单一的,没有多线程情况下没有锁、线程同步的问题,但是CPU是多核的,...

  • Electron

    node GUI Electron 进程间通信IPC 主进程与渲染进程 渲染进程与渲染进程 shell dialo...

  • pm2

    pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,...

  • pm2

    pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,...

网友评论

      本文标题:node 多进程学习

      本文链接:https://www.haomeiwen.com/subject/rfenmqtx.html