workerhelp
Version:
基于Node.js worker_threads 的轻量级跨线程RPC通信模块,支持主线程与Worker线程之间的异步方法调用。
38 lines (33 loc) • 1.33 kB
JavaScript
const { Worker, isMainThread, parentPort, workerData } = require('worker_threads');
if (isMainThread) {
// 主线程逻辑
const sharedBuffer = new SharedArrayBuffer(8); // 创建4字节的共享内存
const array = new BigInt64Array(sharedBuffer); // 使用32位整数视图
array[0] = 0n; // 初始值为0
const numWorkers = 4; // 启动4个Worker线程
let completedWorkers = 0;
for (let i = 0; i < numWorkers; i++) {
new Worker(__filename, {
workerData: {
sharedBuffer: sharedBuffer // 传递共享内存
}
}).on('message', (msg) => {
if (msg === 'done') {
completedWorkers++;
if (completedWorkers === numWorkers) {
console.log('最终结果:', array[0]); // 应为4000000
}
}
});
}
} else {
// Worker线程逻辑
const { sharedBuffer } = workerData;
const array = new BigInt64Array(sharedBuffer);
for (let i = 0; i < 1000000; i++) {
// Atomics.add(array, 0, 1n); // 原子操作递增,每次加1
Atomics.wait(array, 0, 0n, 100)
array[0] += 1n; // 非原子操作递增,每次加1
}
parentPort.postMessage('done'); // 通知主线程完成
}