UNPKG

workerhelp

Version:

基于Node.js worker_threads 的轻量级跨线程RPC通信模块,支持主线程与Worker线程之间的异步方法调用。

38 lines (33 loc) 1.33 kB
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'); // 通知主线程完成 }