JavaScript Atomics 与 SharedArrayBuffer
多线程共享内存:SharedArrayBuffer跨Worker共享、Atomics原子操作(add/sub/compareExchange/wait/notify)、实现无锁数据结构、线程同步原语 · 难度:入门 · +10XP
JavaScript Atomics 与 SharedArrayBuffer —— 跨线程共享内存
Web Worker之间通常通过postMessage通信(复制数据)。SharedArrayBuffer让多个Worker共享同一块内存,Atomics保证并发操作的安全性。
基本用法
// 主线程
const sharedBuffer = new SharedArrayBuffer(4);
const sharedArray = new Int32Array(sharedBuffer);
worker.postMessage(sharedBuffer);
// Worker线程
Atomics.add(sharedArray, 0, 1); // 原子操作:安全地+1
Atomics.wait(sharedArray, 0, 0); // 等待直到值不为0(被通知)
动手练习
- 基础练习:两个Worker共享一个计数器,用Atomics.add安全累加。
- 进阶应用:用Atomics.wait/notify实现一个简单的跨线程信号量。
- 项目实战:在大数据处理场景中用SharedArrayBuffer避免数据拷贝。