Nodejs构建多进程应用

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

Nodejs构建多进程应用

SaraiNoQ   2022-10-20 我要评论

前言

JavaScript 主线程运行在单个进程的单个线程上。这样做的好处是:

  • 程序状态是单一的,在没有多线程的情况下没有锁、线程同步问题,
  • 操作系统在调度时因为较少上下文的切换,可以很好地提高CPU的使用率。

但是单进程单线程并非完美的结构,一旦线程中某段代码发生异常阻塞,会阻塞代码执行而浪费资源。同时,如今CPU基本均是多核的,服务器往往还有多个CPU。

因此 Nodejs 不可避免的面临两个问题:如何充分利用多核CPU ****和 ****如何保证进程的健壮性和稳定性 。 另外,由于 Nodejs 中所有处理都在单线程上进行,影响事件驱动服务模型性能的点在于CPU的计算能力,而不受多进程或多线程模式中资源上限的影响,可伸缩性远比前两者高。如果解决掉多核CPU的利用问题,带来的性能上提升是可观的。

进程的创建和使用

多核利用率

面对单进程单线程对多核使用不足的问题,最简单的方法是启动多进程即可。理想状态下每个进程各自利用一个CPU,以此实现多核CPU的利用。Nodejs 提供了 child_process模块,并且也提供了child_process.fork() 方法帮助我们实现进程的复制。

你可以通过这个方法在本地启动多个 HTTP 服务,首先编写一段创建 http服务端 的代码:

const http = require("http");
const server = http.createServer((req, res) => {
  res.writeHead(200, {
    "Content-Type": "text/plain"
  });
  res.end("hello,world!");
});
// 随机监听1000-1999的任意一个端口
server.listen(Math.floor((1 + Math.random()) * 1000));

然后创建一个主进程 master.js 来启动和管理他们:

const fork = require("child_process").fork;
const cpus = require("os").cpus();
console.log(cpus.length);
for (let i = 0; i < cpus.length; i++) {
  fork('./server.js');
}

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们