首页 > 解决方案 > 用对象填充 SharedArrayBuffer

问题描述

我的应用程序从外部源接收数据并将其分组(匹配组项并将结果显示为 HTML 表格,最高 20k msg/sec)。

问题是共享内存:应用程序实时工作,我收到带有“创建、更新、删除”标志的消息,所以我将所有内容存储在 RAM 中,不需要任何数据库。但是当我尝试对某些集群进行集群时,我的应用程序消息会丢失(我尝试使用pm2进行集群)。

所以现在我正在尝试使用 WorkerThreads 扩展我的应用程序,但是通过通信parentPort.postMessage/worker.postMessage需要对应用程序进行大量更改。所以现在我试图通过 共享内存SharedArrayBuffer,但我不明白如何在 master 和 worker 之间共享对象数组。

const {
  Worker, isMainThread, parentPort, workerData
} = require('worker_threads');

if (isMainThread) {
  const sab = new SharedArrayBuffer(1024);
  sab[0] = {foo: 'bar'};
  const worker = new Worker(__filename, {
    workerData: sab
  });

  setInterval(() => {
   console.log( sab[0] ); // always {foo: 'bar'}
  }, 500);

} else {
  let sab = workerData;
  sab.foo = false; // changing "foo" value at worker but not in main thread
}

setInterval(() => {}, 1000);

标签: node.jsservice-workershared-memoryworker

解决方案


推荐阅读