我的应用程序从外部源接收数据并将其分组(匹配组项目并将结果显示为 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 …Run Code Online (Sandbox Code Playgroud)