NodeJS Child Process对主进程的引用

时间:2017-02-14 20:08:26

标签: node.js process signals child-process

我试图在NodeJS中创建单独的进程。

如果我要分叉一个子进程并发送一个对象,该对象是否会通过引用传入?那么如果我要在子进程中编辑该对象上的变量,它也会在主进程上发生变化吗?或者,这样做的唯一方法是向主进程发送消息,告诉它将变量更改为什么?

1 个答案:

答案 0 :(得分:1)

Node.js文档清楚地说:

  

重要的是要记住产生的Node.js子进程   除了IPC通信之外,它们独立于父级   在两者之间建立的渠道。每个流程都有自己的流程   内存,有自己的V8实例。

但Linux中存在共享内存的概念。这是一个名为'EMS.js'的库,允许在Node.js中使用它。

这是一个例子。我在孩子和父母中设置了数字,然后相应地阅读它们。

master.js:

const {fork} = require('child_process');
const ems = require('ems')(1);
const _ = require('lodash');

const shared = ems.new({
	filename: '/tmp/shared.ems',
	heapSize: 10000,
	dimensions: 100,
	useMap: true,
    //Notice this option here
	useExisting: false,
	ES6proxies: true
});

setInterval(function () {
	shared.parentProperty = `Parent sets: ${_.random(1, 100)}`;
	console.log(shared.childProperty);
}, 500);

//I inherit stdio here to see the output of both processes in console
let child1 = fork('./slave-1.js', {stdio: 'inherit'});

从动1.js:

const _ = require('lodash');

console.log('Slave started');

const ems = require('ems')(1);
const shared = ems.new({
	filename: '/tmp/shared.ems',
	dimensions: 100,
	useMap: true,
	useExisting: true,
	ES6proxies: true
});

setInterval(function () {
	console.log(shared.parentProperty);
	shared.childProperty = `Child sets: ${_.random(1, 100)}`;
}, 500);

还要查看the docs,因为有很多选项+很多东西,比如障碍等。另外要注意堆大小和尺寸选项,不要耗尽内存。

输出:

Slave started
undefined
Parent sets: 52
Child sets: 52
...