首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏程序那些事

    深入理解ES8的新特性SharedArrayBuffer

    简介 ES8引入了SharedArrayBuffer和Atomics,通过共享内存来提升workers之间或者worker和主线程之间的消息传递速度。 本文将会详细的讲解SharedArrayBuffer和Atomics的实际应用。 我们可以通过SharedArrayBuffer来创建Shared memory。 考虑下上面的例子,我们可把消息用SharedArrayBuffer封装起来,从而达到内存共享的目的。 使用Atomics来创建lock 我们来使用SharedArrayBuffer和Atomics创建lock。 iab表示要上锁的SharedArrayBuffer,stateIdx是Array的index。

    1.3K30发布于 2021-03-23
  • 来自专栏鸿蒙开发笔记

    鸿蒙(HarmonyOS)性能优化实战——多线程共享内存

    它支持在多线程之间传递,传递之后的SharedArrayBuffer对象和原始的SharedArrayBuffer对象可以指向同一块内存,进而达到共享内存的目的。 对象 let sab: SharedArrayBuffer = new SharedArrayBuffer(4); // 由于SharedArrayBuffer是原始二进制数据缓冲区,无法直接使用, 所以,在使用SharedArrayBuffer共享内存时,一定要注意使用原子操作保证同步性,否则就可能会造成数据的紊乱。 示例通过Atomics和SharedArrayBuffer简单实现不可重入锁类NonReentrantLock。 = new SharedArrayBuffer(4); // 在主线程,初始化子线程锁标志位,所使用的共享内存 sabForLine: SharedArrayBuffer = new SharedArrayBuffer

    90420编辑于 2024-10-18
  • 来自专栏大龄程序员的人工智能之路

    深度学习的JavaScript基础:矩阵和向量的表示

    SharedArrayBuffer 在深度学习的JavaScript基础:从callbacks到sync/await 这篇文章中,我们提到JS代码是以单线程执行的,但这种说法并非完全正确,因为在HTML5 关于SharedArrayBuffer的并发是一个比较大的话题,这里先不展开讨论。 SharedArrayBuffer 顾名思义就是为线程间共享内存提供了一块内存缓冲区,你可以通过 postMessage 将线程 A 分配的 SharedArrayBuffer 发送给线程 B,然后两个线程就可以共同访问这块内存 下面的代码通过创建 SharedArrayBuffer 来分配一块共享内存: var sab = new SharedArrayBuffer(1024); // 1KiB shared memory : const w = new Worker('worker.js'), buff = new SharedArrayBuffer(1); var arr = new Int8Array(buff)

    2.6K20发布于 2019-12-18
  • 来自专栏giantbranch's blog

    腾讯玄武实验室检测浏览器spectre的原理

    检测地址(也是分析的来源):http://xlab.tencent.com/special/spectre/spectre_check.html 首先判断是否启用了window.SharedArrayBuffer ,如果没有启用的话就直接输出不容易受到攻击 function main() { output_testing_start(); // 如果不支持window.SharedArrayBuffer 直接就输出不受漏洞影响了 // 有了 SharedArrayBuffer 后,多个 web worker 就可以同时读写同一块内存了 // 这种同时访问也有风险,会产生竞争条件 if(window.SharedArrayBuffer) { console.log("cache : 8"); output_cache_log(8); https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/add 第二步 新建了一个SharedArrayBuffer

    24200编辑于 2024-12-31
  • 来自专栏技术社区

    ECMAScript 2017(ES8) 的新特性总结

    对象:用来表示一个通用的,固定长度的原始二进制数据缓冲区 Atomics 对象:提供了一组静态方法用来对 SharedArrayBuffer 对象进行原子操作 async/await async const obj = { name: 'lxm', get age() { return '28' } }; Object.getOwnPropertyDescriptors(obj) SharedArrayBuffer 与 ArrayBuffer 不同的是,SharedArrayBuffer 不能被分离。 * @returns {SharedArrayBuffer} 一个大小指定的新 SharedArrayBuffer 对象。其内容被初始化为 0。 */ new SharedArrayBuffer(length) Atomics 对象 提供了一组静态方法用来对 SharedArrayBuffer 对象进行原子操作。

    76010编辑于 2022-06-16
  • 来自专栏前端杂货铺

    nodejs中的并发编程

    很简单,利用Atomics.wait的等待超时机制: let sharedBuf = new SharedArrayBuffer(4); let sharedArr = new Int32Array(sharedBuf 正如上例中所示,Atomics.wait依赖 SharedArrayBuffer,这是共享内存的ArrayBuffer,threads之间可通过它共享数据,可真正操作ArrayBuffer时并不直接使用该对象 如Atomics.wait,第一个参数必须是Int32Array对象,而该对象指向的缓冲区为SharedArrayBuffer。 的第一项为123后,于B处唤醒阻塞在SharedArrayBuffer第一项的其它线程;此时主线程被唤醒,执行console.log(int32[0]),输出被新线程修改后的SharedArrayBuffer /lock').Lock; let { Worker } = require('worker_threads'); const sharedBuffer = new SharedArrayBuffer

    2.5K21发布于 2020-03-23
  • 来自专栏程序员成长指北

    汇总JS语法 ES6、ES7、ES8、ES9、ES10、ES11、ES12新特性

    SharedArrayBuffer对象 SharedArrayBuffer 对象用来表示一个通用的,固定长度的原始二进制数据缓冲区, /** * * @param {*} length 所创建的数组缓冲区的大小 * @returns {SharedArrayBuffer} 一个大小指定的新 SharedArrayBuffer 对象。其内容被初始化为 0。 */ new SharedArrayBuffer(10) 8. Atomics对象 Atomics 对象提供了一组静态方法用来对 SharedArrayBuffer 对象进行原子操作。

    2.9K11发布于 2021-03-12
  • 来自专栏云前端

    [译] ​ES2017 最佳特性 -- 数组中的异步函数以及共享缓冲区

    这让我们可以在多个 worker 和主线程之间共享 SharedArrayBuffer 对象的字节数据。 被共享的缓冲由一个类型化数组(typed array)包裹,这样就能访问到它们了。 举例来说,可以编写如下代码来创建一个共享数组缓冲区: const worker = new Worker('worker.js'); const sharedBuffer = new SharedArrayBuffer 之后我们用 SharedArrayBuffer 创建了一个 shared buffer。 它包含 100 个元素。

    1K20发布于 2020-11-04
  • 来自专栏痴心阿文的专栏

    ES6,ES7,ES8,ES9,ES10,ES11,ES12...JS语法汇总集合

    SharedArrayBuffer对象 8. Atomics对象 ES9(2018) 1. 异步迭代 2. Promise.finally() 3. Rest/Spread 属性 4. SharedArrayBuffer对象 SharedArrayBuffer 对象用来表示一个通用的,固定长度的原始二进制数据缓冲区, /** * * @param {*} length 所创建的数组缓冲区的大小 * @returns {SharedArrayBuffer} 一个大小指定的新 SharedArrayBuffer 对象。其内容被初始化为 0。 */ new SharedArrayBuffer(10) 8. Atomics对象 Atomics 对象提供了一组静态方法用来对 SharedArrayBuffer 对象进行原子操作。

    4K30编辑于 2022-11-18
  • 来自专栏程序那些事

    ECMAScript 2017(ES8)新特性简介

    于是引入了SharedArrayBuffer这样的共享空间,来提升消息传输效率。 // main.js const worker = new Worker('worker.js'); // To be shared const sharedBuffer = new SharedArrayBuffer ,并将这个SharedArrayBuffer通过postMessage的方式发给worker。 在ES8中,同样引入了Atomics,用来进行SharedArrayBuffer的原子性操作。同时,使用Atomics还可以禁止重排序。 注意,这些Array都是SharedArrayBuffer的封装Array。并且都是Int的Array(目前只支持Int类型)。

    74520发布于 2021-03-17
  • 来自专栏程序那些事

    ECMAScript 2017(ES8)新特性简介

    于是引入了SharedArrayBuffer这样的共享空间,来提升消息传输效率。 // main.js const worker = new Worker('worker.js'); // To be shared const sharedBuffer = new SharedArrayBuffer ,并将这个SharedArrayBuffer通过postMessage的方式发给worker。 在ES8中,同样引入了Atomics,用来进行SharedArrayBuffer的原子性操作。同时,使用Atomics还可以禁止重排序。 注意,这些Array都是SharedArrayBuffer的封装Array。并且都是Int的Array(目前只支持Int类型)。

    54930发布于 2021-04-02
  • 来自专栏黯羽轻扬

    ES2017

    JS异步编程体验上升到了一个新高度,具体见从Generator到Async function 三.Shared memory and atomics 算是在多线程并行能力方面的基础建设,分为2部分: SharedArrayBuffer Atomic operations(原子操作)用来解决数据同步的问题,如加锁、事务 例如: // 主线程 var w = new Worker("myworker.js"); var sab = new SharedArrayBuffer ev.data; // 1KiB shared memory, the same memory as in the parent } 之前 线程之间传递的是值copy,而不是共享引用 现在可以通过SharedArrayBuffer 另外,SharedArrayBuffer可以作为ArrayBuffer使用,所以也可以共享TypedArray: var sab = new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT

    1K30发布于 2019-06-12
  • 来自专栏亦枫的大佬之路

    JavaScript中的ES7/ES8/ES9/ES10

    和Atomics ECMAScript 2017 特性 SharedArrayBuffer 和 atomics”,由Lars T. 它引入了一个新的构造函数 SharedArrayBuffer 和 具有辅助函数的命名空间对象 Atomics。 的 API 构造函数: new SharedArrayBuffer(length) 创建一个 length 字节的 buffer(缓冲区)。 静态属性: get SharedArrayBuffer[Symbol.species] 默认情况下返回 this。 覆盖以控制 slice() 的返回。 实例属性: get SharedArrayBuffer.prototype.byteLength() 返回 buffer(缓冲区) 的字节长度。

    4.6K40发布于 2020-03-19
  • Web Worker 常见使用问题和解决方案

    共享内存 Web Workers 还提供了 SharedArrayBuffer 和 Atomics API,允许多个 Workers 共享同一块内存,从而实现更高效的数据共享和通信。 // index.jsconst sharedBuffer = new SharedArrayBuffer(4); // 创建一个共享内存,包含 4 个字节const worker1 = new Worker 与普通的 ArrayBuffer 不同,SharedArrayBuffer 不受同源策略限制,因此可以在不同源的 Workers 之间进行共享。 通过使用 SharedArrayBuffer 和 Atomics API,多个 Workers 可以在共享的内存中进行高效的数据操作,从而实现更快速和高效的数据共享和通信,尤其对于大规模数据处理或复杂计算的场景下 然而,需要注意的是,由于共享内存可能涉及到并发访问和竞态条件,使用 SharedArrayBuffer 和 Atomics API 需要谨慎处理,并遵循相关的安全性和最佳实践,以确保数据的正确性和一致性

    89000编辑于 2024-03-09
  • 来自专栏京程一灯

    初探新的 JavaScript 并行特性

    这种新的共享内存类型被称为SharedArrayBuffer,和现在的ArrayBuffer类型很相似,两者最大的区别是:SharedArrayBuffer对应的内存可以被多个代理者同时引用(代理者可以是网页的主程序 使用PostMessage在两个代理者之间传递SharedArrayBuffer就会触发共享: let sab = new SharedArrayBuffer(1024) let w = new Worker 一旦SharedArrayBuffer被共享,所有引用它的代理人都可以创建一个TypedArray视图并使用标准的数组操作来读写这块内存。

    1.2K20发布于 2019-03-28
  • harmony-utils之TypeUtil,类型检查工具类

    ArrayBuffer类型let isArrayBuffer = TypeUtil.isArrayBuffer(new ArrayBuffer(0));isSharedArrayBuffer 检查是否为SharedArrayBuffer 类型let isSharedArrayBuffer = TypeUtil.isSharedArrayBuffer(new SharedArrayBuffer(0));isAnyArrayBuffer 检查是否为 ArrayBuffer或SharedArrayBuffer类型let isAnyArrayBuffer = TypeUtil.isAnyArrayBuffer(new ArrayBuffer(0));isUint8Array

    22300编辑于 2025-06-29
  • 来自专栏腾讯技术工程官方号的专栏

    Javascript 多线程编程​的前世今生

    作者:jolamjiang,腾讯 WXG 前端开发工程师 一篇关于 Web Worker、SharedArrayBuffer、Atomics 的文章。 SharedArrayBuffer 为了解决通讯效率问题,浏览器提出了 ShareArrayBuffer,ShareArrayBuffer 基于 ArrayBuffer 和 TypedArray API WebAssembly 有了 SharedArrayBuffer 和 Atomics 能力之后,证明浏览器能够提供内存共享和锁的实现了,也就是说 WebAssembly 线程在浏览器机制上能够高效地得到保证 其实我严重怀疑 SharedArrayBuffer 和 Atomics 是为了支持 WebAssembly 才把 API 顺便提供给 JS Runtime 的,因为目前为止没有看到 ES 有比较丰富的关于锁的草案 普通的 Javascript Object 无法共享 这其实也是 API 过于底层的另一方面的体现,也就是说对 JS 对象进行内存共享的话,你需要开辟一段 SharedArrayBuffer,然后在此之上实现对

    99942发布于 2020-06-16
  • 来自专栏鸿蒙开发笔记

    HarmonyOS 开发实践 —— 应用内存优化实践

    使用可共享对象:共享对象SharedArrayBuffer,拥有固定长度,可以存储任何类型的数据,包括数字、字符串等。 共享对象传输指SharedArrayBuffer支持在多线程之间传递,传递之后的SharedArrayBuffer对象和原始的SharedArrayBuffer对象指向同一块内存,进而达到内存共享的目的

    1.3K20编辑于 2024-12-22
  • 来自专栏京程一灯

    为什么需要“跨域隔离”才能获得强大的功能

    在跨域隔离状态下,发出请求的站点被认为不太危险,并且可以解锁强大的功能,例如 SharedArrayBuffer,performance.measureMemory 和 JS Self-Profiling 总结 如果要确保访问诸如 SharedArrayBuffer,Performance.measureMemory 或 JS Self-Profiling API 之类的强大功能,只需记住你的文档需要同时使用 计划对共享内存进行的更改 - JavaScript | MDN(https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer

    3.2K10发布于 2020-05-18
  • 来自专栏javascript学习笔记

    2022年,马上都ES2022了,还只知道ES6的新特性?

    String.prototype.padEnd 允许函数参数列表结尾存在逗号 添加Object.getOwnPropertyDescriptors(): 获取一个对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象 新增SharedArrayBuffer 对象:用来表示一个通用的,固定长度的原始二进制数据缓冲区 新增Atomics 对象:提供了一组静态方法用来对 SharedArrayBuffer 对象进行原子操作 四、ES2018(ES9) 允许异步迭代

    1.1K20编辑于 2022-02-12
领券