• node.js


    var cluster = require('cluster')
    var numCPUS = require('os').cpus().length
    if(cluster.isMaster){//主进程代码
        console.log(numCPUS)
        for(var i=0;i<numCPUS;i++){
            var worker = cluster.fork()
        }
    }else{
        require('./app.js')
    }
    //pm2
    

    nodejs开启多进程 ps aux | grep node 查看当前运行几个nodejs进程

    守护进程setsid

    node.js

    nodebindings  add-ons 

    nodebindings  接入:v8  libuv的eventloop  libuv的io异步事件  dns

    nodebindings通过系统调用 (os operation )libuv ,会存在循环队列中,libuv会把循环队列中的回调通过事件循环放在工作线程中执行,事件循环把回调结果通过系统调用os operation返回v8,同时吧循环队列中的事件清除掉,最后再到代码

    add-ons  接入:ssl http zlib解压缩

    libuv的eventloop 7个阶段

    1.update timer  更新系统时间 为之后timer提供计时的下标,避免过多调用影响系统性能

    2.run timer 运行timer settimeout setinterval

    3.io/callback队列   文件读取,网络io

    4.idle/prepare  在内部做一些事情,如果节点状态为active状态,每次事件循环都会调用 process.nexttick

    5.io/poll阶段 调用各平台提供的io多路复用接口,执行io回调,调用循环队列中的事件,如果poll队列不为空,将会递归遍历事件循环同步执行callback队列,直到队列为空,如果poll队列为空,有setimmedate会立即进入,等待callback添加到队列中,然后立即执行,有超时timmer会回到timmer

    6.check阶段 setimmediate

    7.close callbacks 关闭io 链接断开,文件描述符的关闭

  • 相关阅读:
    python+opencv实现图像缩放
    vim 常用指令-持续更新
    python实现简单的SVM
    linux查看当前目录下,各文件夹大小
    python解析json文件信息到csv中
    根据小图文件名在原图画框
    BZOJ1079: [SCOI2008]着色方案 (记忆化搜索)
    BZOJ1044: [HAOI2008]木棍分割 (二分 + DP)
    gym100825G. Tray Bien(轮廓线DP)
    BZOJ1237: [SCOI2008]配对
  • 原文地址:https://www.cnblogs.com/MDGE/p/15978356.html
Copyright © 2020-2023  润新知