Skip to content

Workers 并发通信

Node.js Worker 示例

ts
// main.ts
import { Worker } from 'node:worker_threads';
import { SharedMemoryBase } from 'wasm-memx';

const mem = new SharedMemoryBase(1024);
const worker = new Worker('./worker.js', { workerData: mem.getBuffer() });

worker.on('message', msg => console.log(msg));
ts
// worker.ts
import { workerData, parentPort } from 'node:worker_threads';

const buf = workerData as SharedArrayBuffer;
const view = new Uint32Array(buf);
view[0] = 42;
parentPort?.postMessage(view[0]);

浏览器 Web Worker 示例

浏览器中需启用跨源隔离,否则 SharedArrayBuffer 不可用:参考 examples/web/vite.config.js:1

ts
// main.ts
const worker = new Worker(new URL('./worker.js', import.meta.url), { type: 'module' });
const sab = new SharedArrayBuffer(1024);
worker.postMessage(sab);
ts
// worker.ts
self.onmessage = (e) => {
  const view = new Float32Array(e.data as SharedArrayBuffer);
  view[0] = 3.14;
};

原子操作与同步

在多线程场景可使用 Atomics 实现基本同步(如环形队列、标志位)。确保始终使用 Int32Array/BigInt64Array 等支持原子的视图类型。

MIT Licensed