首页 > web前端 > js教程 > 正文

JavaScript共享内存与原子操作

紅蓮之龍
发布: 2025-10-22 15:52:01
原创
367人浏览过
JavaScript通过SharedArrayBuffer实现多线程间共享内存,结合Atomics对象提供的原子操作确保数据安全。1. SharedArrayBuffer允许主线程与Web Workers共享同一块内存,实现高效数据传递;2. Atomics提供load、store、add、sub、compareExchange等方法,保证操作的原子性,避免数据竞争;3. 可用于构建跨线程计数器、自旋锁等同步机制;4. 使用需配置CORS策略以应对Spectre漏洞风险。

javascript共享内存与原子操作

JavaScript中的共享内存与原子操作主要通过 SharedArrayBufferAtomics 对象实现,用于在多个线程之间高效共享数据并进行同步操作。这在使用 Web Workers 进行多线程编程时尤其有用。

SharedArrayBuffer:共享内存的基础

SharedArrayBuffer 是一种允许在主线程和 Web Workers 之间共享同一块内存的内置对象。与普通的 ArrayBuffer 不同,SharedArrayBuffer 的内容可以被多个上下文同时访问。

创建 SharedArrayBuffer 并将其传递给 Worker 示例:

// 主线程中 const sharedBuffer = new SharedArrayBuffer(1024); // 1KB 共享内存 const int32View = new Int32Array(sharedBuffer); const worker = new Worker('worker.js'); worker.postMessage(int32View);

在 worker.js 中接收共享数组:

立即学习Java免费学习笔记(深入)”;

// worker.js self.onmessage = function(e) { const int32View = e.data; // 接收到共享内存视图 console.log('Worker 收到共享数组:', int32View); };

Atomics:确保并发安全的操作

由于多个线程可能同时读写共享内存,必须防止数据竞争。JavaScript 提供了 Atomics 对象,包含一系列静态方法,用于执行不可中断的原子操作。

常用 Atomics 方法包括:

Trae国内版
Trae国内版

国内首款AI原生IDE,专为中国开发者打造

Trae国内版 815
查看详情 Trae国内版
  • Atomics.load():从指定位置读取值(带同步保证)
  • Atomics.store():向指定位置写入值
  • Atomics.add() / Atomics.sub():原子地增加或减少值
  • Atomics.compareExchange():比较并交换,常用于实现锁
  • Atomics.wait() / Atomics.wake():用于线程阻塞与唤醒(仅在主线程外可用)

示例:两个线程对同一位置进行累加:

// 主线程或 Worker 中 Atomics.add(int32View, 0, 1); // 将索引0处的值加1

实际应用场景:计数器与线程同步

利用共享内存和原子操作,可以构建跨线程的计数器或实现简单的同步机制

例如,多个 Worker 同时递增一个共享计数器:

// 在每个 Worker 中 const index = 0; const currentValue = Atomics.load(int32View, index); console.log('当前计数值:', currentValue); const newValue = Atomics.add(int32View, index, 1); console.log('递增后,原值为:', newValue);

通过 Atomics.compareExchange 可模拟一个简单的自旋锁:

const lockIndex = 1; function acquireLock(ta) { while (!Atomics.compareExchange(ta, lockIndex, 0, 1)) { // 等待锁释放 } } function releaseLock(ta) { Atomics.store(ta, lockIndex, 0); }

基本上就这些。只要合理使用 SharedArrayBuffer 和 Atomics,就能在 JavaScript 中安全地处理多线程数据共享问题。注意:出于安全考虑(如 Spectre 漏洞),使用 SharedArrayBuffer 需要设置正确的 CORS 和跨域策略头。不复杂但容易忽略。

以上就是JavaScript共享内存与原子操作的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号