node.js实战之node多进程与jxcore打包深入运用(代码片段)

黎燃黎燃 黎燃黎燃     2022-12-01     591

关键词:

@[toc]

JXcore 打包

Jxcore是一个支持多线程JS发布版本的节点,基本上不需要对现有代码进行任何更改,可以直接在多线程中运行,具有线程安全性。
本文主要介绍jxcore的封装功能。
下载jxcore安装包并解压缩。解压目录中提供了JX二进制文件命令。接下来,我们主要使用这个命令。
Linux/OSX 安装命令:

$ curl https://raw.githubusercontent.com/jxcore/jxcore/master/tools/jx_install.sh | bash

如果权限不足,可以使用以下命令:

$ curl https://raw.githubusercontent.com/jxcore/jxcore/master/tools/jx_install.sh | sudo bash

如果上述步骤正确,将使用以下命令输出版本号信息:

$ jx --version
v0.10.32

如果成功执行上述命令,将生成以下两个文件:
指数这是一个中间件文件,包含需要编译的完整项目信息。
指数这是一个完整包信息的二进制文件,可以在客户端上运行。

drwxr-xr-x  2 root root  4096 Nov 13 12:42 images
-rwxr-xr-x  1 root root 30457 Mar  6 12:19 index.htm
-rwxr-xr-x  1 root root 30452 Mar  1 12:54 index.js
drwxr-xr-x 23 root root  4096 Jan 15 03:48 node_modules
drwxr-xr-x  2 root root  4096 Mar 21 06:10 scripts
drwxr-xr-x  2 root root  4096 Feb 15 11:56 style

Node.js 的项目运行:

$ node index.js command_line_arguments

使用 JXcore 编译后,我们可以使用以下命令来执行生成的 jx 二进制文件:

$ jx index.jx command_line_arguments

Node.js 多进程

我们都知道node JS以单线程模式运行,但它使用事件驱动来处理并发。
这有助于我们在多核CPU系统上创建多个子进程,从而提高性能。
每个子进程总是有三个流对象:child和stdin,以及child。
标准输出和子标准输出它们可以共享父进程的stdio流,也可以是独立的重定向流对象。
节点提供child_流程模块用于通过以下方式创建子流程:
exec-child_进程。
Exec使用子进程执行命令,缓存子进程的输出,并以回调函数参数的形式返回子进程的结果。
spawn-child_进程。
Spawn使用指定的命令行参数创建新进程。
fork-child_进程。
Fork是spawn()的一种特殊形式,用于在子进程中运行的模块。例如,fork(./son.JS)等同于spawn(node[./son.JS)。与spawn方法不同,fork将在父进程和子进程之间建立通信管道,用于进程之间的通信。

exec() 方法

child_进程。Exec使用子进程执行命令,缓存子进程的输出,并以回调函数参数的形式返回子进程的结果。

child_process.exec(command[, options], callback)

callback:回调函数,包括三个参数:error、stdout和stderr。
exec()方法返回最大缓冲区,等待进程结束,并一次返回缓冲区的内容。

onsole.log("进程 " + process.argv[2] + " 执行。" );
const fs = require(fs);
const child_process = require(child_process);

for(var i=0; i<3; i++) 
    var workerProcess = child_process.exec(node support.js +i, function (error, stdout, stderr) 
        if (error) 
            console.log(error.stack);
            console.log(Error code: +error.code);
            console.log(Signal received: +error.signal);
        
        console.log(stdout:  + stdout);
        console.log(stderr:  + stderr);
    );

    workerProcess.on(exit, function (code) 
        console.log(子进程已退出,退出码 +code);
    );

执行上述代码,输出结果为:

spawn() 方法

child_process.spawn(command[, args][, options])

spawn()方法返回一个流(stdout&stderr),当进程返回大量数据时使用该流。一旦进程开始执行,spawn()就开始接收响应。

console.log("进程 " + process.argv[2] + " 执行。" );
const fs = require(fs);
const child_process = require(child_process);

for(var i=0; i<3; i++) 
   var workerProcess = child_process.spawn(node, [support.js, i]);

   workerProcess.stdout.on(data, function (data) 
      console.log(stdout:  + data);
   );

   workerProcess.stderr.on(data, function (data) 
      console.log(stderr:  + data);
   );

   workerProcess.on(close, function (code) 
      console.log(子进程已退出,退出码 +code);
   );

执行以上代码,输出结果为:
子进程已退出

子进程已退出,退出码 0
stdout: 进程 1 执行。

子进程已退出,退出码 0
stdout: 进程 2 执行。

fork 方法

child_进程。Fork是spawn()方法的一种特殊形式,用于创建进程。语法格式如下:

child_process.fork(modulePath[, args][, options])

除了childprocess实例的所有方法之外,返回的对象还具有内置的通信通道。
说明如下:

Modulepath:string,要在子进程中运行的模块
Args:数组字符串参数数组
options:对象

nodejs原理&源码赏析深度剖析cluster模块源码与node.js多进程(上)(代码片段)

目录一.概述二.线程与进程三.cluster模块源码解析3.1起步3.2入口3.3主进程模块master.js3.4子进程模块child.js四.小结示例代码托管在:http://www.github.com/dashnowords/blogs博客园地址:《大史住在大前端》原创博文目录华为云社区地址:【... 查看详情

系列3|走进node.js之多进程模型

...js是如何处理HTTP请求的,在整个处理过程,它仅仅用到单进程模型。那么如何让Web应用扩展到多进程模型,以便充分利用CPU资源呢?答案就是Cluster。本篇文章将带着大家一起分析Node.js的多进程模型。首先,来一段经典的Node.js主... 查看详情

实战系列之node.js玩转java

这些年以来,Node.js的兴起,JavaScript已经从当年的“世界最被误解的语言”变成了“世界最流行的语言”。且其发展之势,从语言本身的进化,库和包的增长,工具支持的完善,star项目和领域解决方案的涌现,平台... 查看详情

node.js实战一文带你开发博客项目之联调(导入htmlnginx反向代理cors解决跨域与前端联调)(代码片段)

...4d;前端面试宝典🍉Vue2🍋Vue3🍓Vue2&Vue3项目实战🥝Node.js🍒Three.js🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧Node.js系列文章目录内容参考链接Node.j... 查看详情

node.js切近实战之linux部署

之前的话我们的项目都是跑在windows上,今天我们要将我们的程序跑到linxu机器上。在看linux部署之前,我们先看一下node.js类似于asp.netmvc的过滤器或者叫拦截器。在app.js中我们加入如下代码var beforeRequest = function (req... 查看详情

node.js多进程

...线程的,如果我们使用nodeapp.js方式运行,就启动了一个进程,只能在一个CPU中进行运算,无法应用服务器的多核CPU。为了解决这个问题,我们可以使用多进程分发策略,即主进程接收所有请求,然后通过一定的负载均衡策略分... 查看详情

node.js中文资料导航

...进阶必读)Node.js中文文档被误解的Node.jsNode.jsC++addon编写实战系列热门node.js模块排行榜,方便找出你想要的模块nodejs多线程,真正的非阻塞浅析nodejs的buffer类利用libuv编写异步多线程的addon实例Node.js中exports与module.exp 查看详情

node.js实战一文带你开发博客项目之登录(前置知识)(代码片段)

...4d;前端面试宝典🍉Vue2🍋Vue3🍓Vue2&Vue3项目实战🥝Node.js🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧Node.js系列文章目录内容参考链接Node.js(一ÿ... 查看详情

node.js切近实战之excel在线

终于如愿以偿的去了趟青海湖,感觉美美的。我想着老了(50岁),去那里帮牧民看牦牛,放羊。看着蓝天白云,一望无际碧绿的湖水,想想写程序的这些年,想想城市生活,想想人的一生到底是为了什么,人的一生难道只是为... 查看详情

创业笔记-node.js入门之javascript与node.js

JavaScript与Node.jsJavaScript与你抛开技术,我们先来聊聊你以及你和JavaScript的关系。本章的主要目的是想让你看看,对你而言是否有必要继续阅读后续章节的内容。如果你和我一样,那么你很早就开始利用HTML进行“开发”,... 查看详情

node.js使用多进程提高任务执行效率的方法

在Node.JS中使用多进程非常简单,合理使用多进程,可以解放硬件的能力,让软件的运行效率得到肉眼可见的提升。本文详细讲解了Node.js使用多进程提高任务执行效率的方法,对大家的学习或工作具有一定的参考借鉴价值,需要... 查看详情

[js高手之路]node.js+jade+mongoose实战todolist(分页,ajax编辑,删除)

...文章列表信息[js高手之路]Node.js模板引擎教程-jade速学与实战1-基本用法[js高手之路]Node.js模板引擎教程-jade速学与实战2-流程控制,转义与 查看详情

node.js的多版本管理工具之nvm(代码片段)

(Node.js的多版本管理工具之nvm)nvm非Windows系统:https://github.com/nvm-sh/nvmWindows系统:https://github.com/coreybutler/nvm-windows安装nvm双击安装程序,选择nvm安装目录这个我的理解就是node的真实运行目录,通过切换不同版本,改变这个目录的... 查看详情

node.js实战之—优化汇总

Express页面缓存app.set("cache view",true); --设置页面缓存开发模式下博主建议不要这么做,因为开发中我们会频繁的对页面的样式、js等进行修改,如果开启了页面缓存我们需要强制刷新页面才能正常调试,会很麻烦。compression... 查看详情

node.js切近实战之excel在线(文件&文件组)

最近西安的天气真他妈的热,感觉还是青海的天气美,最高温28度。上周逛了青海湖,感觉还是意犹未尽,其实我还是很喜欢去一趟西藏的,但是考虑到花费也没人陪我,我暂时放弃这个念头。计划去一下重庆或者甘南,也许是... 查看详情

node.js的线程和进程

http://www.admin10000.com/document/4196.html前言  很多Node.js初学者都会有这样的疑惑,Node.js到底是单线程的还是多线程的?通过本章的学习,能够让读者较为清晰的理解Node.js对于单/多线程的关系和支持情况。同时本章还将列举一些让... 查看详情

[转]node.js的线程和进程

[From] http://www.admin10000.com/document/4196.html 前言  很多Node.js初学者都会有这样的疑惑,Node.js到底是单线程的还是多线程的?通过本章的学习,能够让读者较为清晰的理解Node.js对于单/多线程的关系和支持情况。同时本章还... 查看详情

node.js+vue+mysql项目实战入门之环境搭建,项目创建-附github地址(代码片段)

Node进行后端开发,Vue进行前端页面的开发,实现了前后端的分离。在开发中使用Express框架可以快速地开发web应用程序。1.安装node.js下载对应版本的,网址:Download|Node.js;进行傻瓜式安装:最后点击install... 查看详情