zoukankan      html  css  js  c++  java
  • Node.cluster

    nodejs是一个单进程单线程的引擎,只能利用到单个cpu进行计算,面对当今服务器性能的提高,cpu的利用率显然对node应有的性能大打折扣,面对这个问题,cluster应运而生。

    cluster介绍

    cluster是一个nodejs内置的模块,用于nodejs多核处理。cluster模块,可以帮助我们简化多进程并行化程序的开发难度,轻松构建一个用于负载均衡的集群。

    API

    cluster对象

    cluster的各种属性和函数
    cluster.setttings:配置集群参数对象
    cluster.isMaster:判断是不是master节点
    cluster.isWorker:判断是不是worker节点
    Event: 'fork': 监听创建worker进程事件
    Event: 'online': 监听worker创建成功事件
    Event: 'listening': 监听worker向master状态事件
    Event: 'disconnect': 监听worker断线事件
    Event: 'exit': 监听worker退出事件
    Event: 'setup': 监听setupMaster事件
    cluster.setupMaster([settings]): 设置集群参数
    cluster.fork([env]): 创建worker进程
    cluster.disconnect([callback]): 关闭worket进程
    cluster.worker: 获得当前的worker对象
    cluster.workers: 获得集群中所有存活的worker对象

    worker对象

    worker的各种属性和函数:可以通过cluster.workers, cluster.worket获得。
    worker.id: 进程ID号
    worker.process: ChildProcess对象
    worker.suicide: 在disconnect()后,判断worker是否自杀
    worker.send(message, [sendHandle]): master给worker发送消息。注:worker给发master发送消息要用process.send(message)
    worker.kill([signal='SIGTERM']): 杀死指定的worker,别名destory()
    worker.disconnect(): 断开worker连接,让worker自杀
    Event: 'message': 监听master和worker的message事件
    Event: 'online': 监听指定的worker创建成功事件
    Event: 'listening': 监听master向worker状态事件
    Event: 'disconnect': 监听worker断线事件
    Event: 'exit': 监听worker退出事件

    简单实现代码

    //引用cluster模块
    var cluster = require('cluster');
    //引用os模块 根据CPU的核数,获取CPU的length
    var numCPUs = require('os').cpus().length;
    
    //子进程列表
    var workers = {};
    
    cluster.setupMaster({
        exec:"./app.js"
    });
    
    //主进程
    if(cluster.isMaster){
        for(var i = 0; i < numCPUs ; i++){
            //复制进程
            workers[i] = cluster.fork();
        }
    }
    
    //进程被复制创建时触发
    cluster.on('fork', function (workers) {
    
        LogFile.trace('一个进程被创建, workers.process.pid is  '+workers.process.pid);
    });
    
    cluster.on('online',function(workers){
        //console.logs(workers.process.pid);
    });
    
    cluster.on('death', function (worker) {
        //当前进程死亡时的监听事件
    });
    
    cluster.on('exit', function (worker,code,sigian) {
        //当前业务进程退出时的监听事件
        LogFile.trace(worker.process.pid+' 进程退出.');
    });
  • 相关阅读:
    Linux使用定时器timerfd 和 eventfd接口实现进程线程通信
    C++面向对象实现封装线程池
    生产者与消费者问题,C++利用bind基于对象实现与面向对象实现
    C++11新特性,bind,基于对象
    [HDU
    [HDU
    [HDU
    【BZOJ3707】圈地 (几何,旋转坐标系)
    [HDU
    [Codeforces Round #595 (Div. 3)] F. Maximum Weight Subset (树形DP)
  • 原文地址:https://www.cnblogs.com/z-yue/p/5710731.html
Copyright © 2011-2022 走看看