Node.js实战之Node多进程与JXcore 打包深入运用
Posted 黎燃黎燃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js实战之Node多进程与JXcore 打包深入运用相关的知识,希望对你有一定的参考价值。
@[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:对象
以上是关于Node.js实战之Node多进程与JXcore 打包深入运用的主要内容,如果未能解决你的问题,请参考以下文章