概述SharedArrayBuffer 与 Atomics 适合高吞吐的跨线程队列。本文提供最小实现与安全注意点。能力检测与队列实现const supportsSAB = typeof SharedArrayBuffer === 'function' && typeof Atomics === 'object'; function createRing(cap = 1024) { if (!supportsSAB) throw new Error('SAB unsupported'); const sab = new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT * (2 + cap)); const meta = new Int32Array(sab, 0, 2); const buf = new Int32Array(sab, Int32Array.BYTES_PER_ELEMENT * 2, cap); meta[0] = 0; // head meta[1] = 0; // tail return { sab, meta, buf, cap }; } function push(q, v) { const next = (q.meta[0] + 1) % q.cap; if (next === q.meta[1]) return false; q.buf[q.meta[0]] = v; Atomics.store(q.meta, 0, next); Atomics.notify(q.meta, 0); return true; } function pop(q) { if (q.meta[1] === q.meta[0]) { Atomics.wait(q.meta, 0, q.meta[0]); } const v = q.buf[q.meta[1]]; Atomics.store(q.meta, 1, (q.meta[1] + 1) % q.cap); return v; } 安全与环境要求const requiresCOOP_COEP = true; // 需在生产配置中启用跨源隔离

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
2.110540s