Node.js:在 Javascript 工作进程和父进程之间共享对象

问题描述

我正在使用 js worker_threads 来利用 Js 中的线程。我知道 Js 会发送一份我们发送给工作人员的数据副本。但它的内存效率不高,所以我尝试在父进程和工作进程之间使用共享内存。我阅读了 this article 以了解如何完成。但就我而言,我将共享一个 Object 而不是众所周知的数据类型。

为了共享一组数字,我们可以这样做:

const {Worker} = require("worker_threads");

let nums = [12,43,45,40];

//get size of the array buffer with int32 size buffer for each element in the array
const size = Int32Array.BYTES_PER_ELEMENT*nums.length;

//create the buffer for the shared array
const sharedBuffer = new SharedArrayBuffer(size);
const sharedArray = new Int32Array(sharedBuffer);

nums.forEach((num,index) => {
  Atomics.store(sharedArray,index,num);
})

//Create new worker
const worker = new Worker("./worker.js");

//Listen for a message from worker
worker.on("message",result => {
  console.log(`${result.num}th Fibonacci Number: ${result.fib}`);
});

worker.on("error",error => {
  console.log(error);
});

worker.postMessage({nums: sharedArray});

worker.js 文件中,我们可以像这样访问这些数据,其内存在父进程和工作进程之间共享:

const { parentPort } = require("worker_threads");

parentPort.on("message",(msg) => {
    console.log(msg.data);
});

共享内存中我要的数据是这样的(类似例子):

data = {
    name: "Bob",age: 18,marks: [
        {
            name: "Math",marks: 100,},{
            name: "English",marks: 90,...
    ],};

会有多个工作人员,他们将修改对象。对于给定的示例,他们将更新某些特定主题标记。最后,父进程将把这个对象保存到数据库中。

如何为给定场景创建共享对象?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)