美文网首页
Nodejs如何充分利用多核CPU

Nodejs如何充分利用多核CPU

作者: wildfox_9913 | 来源:发表于2019-10-17 00:10 被阅读0次

Nodejs单进程带来的问题

大家都知道, nodejs是单进程单线程的,但是现在的服务器基本都是多核的,这导致了服务器资源的浪费,而且一旦程序出现未知异常, 就会使整个进程奔溃,导致服务不可用,那我们该如何来改善这样的情况呢?
注意nodejs在底层使用了libuv库来实现多线程IO操作,其对用户不可见。但是nodejs的主程序还是运行在单进程单线程上。

cluster模块实现多进程nodejs应用

const express = require("express")
const cluster = require("cluster")
const fs = require("fs")
const os = require("os")

if (cluster.isMaster) {
    console.log("master" + process.pid + "正在运行")
    const cpus = os.cpus().length
    for (let i = 0; i < cpus; i++) {
        cluster.fork()
    }
    cluster.on("exit", (worker, code, signal) => {
        console.log("工作进程" + worker.process.pid + "已退出")
    })
} else {
    const app = express()
    const pid = process.pid
    app.listen(3000, () => {
        console.log(`工作进程${cluster.worker.process.pid} is runing`)
    })

    app.get("/test", function (req, res, next) {
        console.log(`${cluster.worker.process.pid}`)
        fs.readFile('./package-lock.json', (err, data) => {
            res.send(data)
        })
    })
}

运行程序并且记录到server.log可以看到

node with-cluster.js > server.log
> fork@1.0.0 start /Users/xxxxx/node-fork
> node with-cluster

master23470正在运行
工作进程23472 is runing
工作进程23473 is runing
工作进程23476 is runing
工作进程23471 is runing
工作进程23474 is runing
工作进程23475 is runing
工作进程23478 is runing
工作进程23477 is runing

由于我的电脑是8核的,所以cluster会fork出来8个nodejs进程

使用R语言分析server.log

> df<-read.table(file="server.log")
> summary(df)
           V1      
 worker23476:2292  
 worker23477:2283  
 worker23472:2248  
 worker23478:2248  
 worker23474:2246  
 worker23473:2230  
 (Other)    :4299  
> 

可以看出来每个进程的nodejs接收到的请求很平均, cluster为我们自动做了负载均衡

相关文章

  • Nodejs如何充分利用多核CPU

    Nodejs单进程带来的问题 大家都知道, nodejs是单进程单线程的,但是现在的服务器基本都是多核的,这导致了...

  • 为什么要使用多线程?

    充分利用多核CPU多线程可以真正充分利用和发挥多核CPU的优势,同时独立完成N个任务而不互相干扰。 提高运行效率可...

  • 818 NodeJS的Cluster模块

    NodeJS是单进程单线程 [1] 结构,适合编写IO密集型的网络应用。为了充分利用多核CPU的计算能力,最直接的...

  • CompletableFuture让你的代码免受阻塞之苦

    前言 现在大部分的CPU都是多核,我们都知道想要提升我们应用程序的运行效率,就必须得充分利用多核CPU的计算能力;...

  • CompletableFuture 让你的代码免受阻塞之苦

    前言 现在大部分的CPU都是多核,我们都知道想要提升我们应用程序的运行效率,就必须得充分利用多核CPU的计算能力;...

  • Python基于进/线程池实现大数据量爬虫项目

    如今计算机已经进入多核CPU的时代了,使用多线程或多进程能够充分利用CPU多核性能来提高程序的执行效率。 Pyth...

  • 线程

    单核CPU如何执行多任务? 多核CPU如何执行多任务? 真正的并行执行多任务只能在多核CPU上实现,但是,由于任务...

  • 多进程架构 child_process

    面对单进程单线程对多核使用不足的问题,理想状态下每个进程各自利用一个cpu,以此实现多核CPU的利用,nodejs...

  • Node介绍9-进程

    使用node的时候,不得不关注node的两个缺点。 如何充分利用多核cpu的计算能力。 如何保证进程的健壮性和稳定...

  • java高级用法之:绑定CPU的线程Thread-Affinit

    简介 在现代计算机系统中,可以有多个CPU,每个CPU又可以有多核。为了充分利用现代CPU的功能,JAVA中引入了...

网友评论

      本文标题:Nodejs如何充分利用多核CPU

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