Ссылка дочернего процесса NodeJS на основной процесс

Я пытаюсь обдумать создание отдельных процессов в NodeJS.

Если бы я разветвил дочерний процесс и отправил ему объект, этот объект был бы передан по ссылке? То есть, если бы я редактировал переменную в дочернем процессе этого объекта, она бы изменилась и в основном процессе? Или это единственный способ сделать что-то подобное — отправить сообщение основному процессу, сообщая ему, на что изменить переменную?


person user1157885    schedule 14.02.2017    source источник


Ответы (1)


Документы Node.js ясно говорят, что:

Важно помнить, что порожденные дочерние процессы Node.js не зависят от родителя, за исключением канала связи IPC, который устанавливается между ними. Каждый процесс имеет свою собственную память со своими собственными экземплярами V8.

Но в Linux есть понятие Shared Memory. Вот библиотека под названием '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);

Также ознакомьтесь с документами, так как там много вариантов и много всего, например барьеров. и т. д. Кроме того, будьте осторожны с параметрами размера кучи и размеров, чтобы не исчерпать память.

Выход:

Slave started
undefined
Parent sets: 52
Child sets: 52
...
person Antonio Narkevich    schedule 17.02.2017