JavaScript Atomics.waitAsync 异步等待
Atomics.waitAsync()非阻塞等待(替代Atomics.wait阻塞):返回Promise<{value,async}>、Worker线程间异步同步、实现异步互斥锁/信号量 · 难度:入门 · +10XP
Atomics.waitAsync —— 非阻塞的线程等待
Atomics.wait是阻塞的(会卡住Worker线程)。Atomics.waitAsync返回一个Promise,实现非阻塞等待。
基本用法
const sab = new SharedArrayBuffer(4);
const view = new Int32Array(sab);
const result = Atomics.waitAsync(view, 0, 0); // 等待view[0]不等于0
if (result.async) {
result.value.then(() => console.log('被唤醒了!'));
}
// 另一个线程
Atomics.store(view, 0, 1);
Atomics.notify(view, 0, 1); // 唤醒等待的线程
动手练习
- 基础练习:两个Worker用Atomics.waitAsync+notify实现交替执行。
- 进阶应用:实现一个简单的异步互斥锁(Mutex)。
- 项目实战:在多Worker数据处理中用Atomics同步任务状态。