用对象填充 SharedArrayBuffer

Vit*_*lii 6 worker shared-memory node.js service-worker

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

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

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

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);
Run Code Online (Sandbox Code Playgroud)