如何解决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 举报,一经查实,本站将立刻删除。