SharedArrayBuffer和Atomics
创始人
2024-05-29 23:38:05
0

目前 JavaScript 缺少一个真正可用的多线程并发编程模型。当然 SharedArrayBuffer 和 Atomics 标准的制定也有一段时间了,但是:

  1. SAB 和 Atomics 一直都是一个实验特性,最近还因为会被“熔断”和“幽灵”这样的时间攻击漏洞所利用而在各大浏览器里面被“下架”了;
  2. 因为 JavaScript 本身没有类型系统,无法定义数据结构的内存布局。在只能共享 Typed Arrays 内存缓冲区的情况下,要在 JavaScipt 中使用多线程并发还是相当困难的。

1 SAB和Atomics的基本概念

SharedArrayBuffer - JavaScript | MDN

一个通用的、固定长度的原始二进制数据缓冲区,类似于ArrayBuffer对象,它们都可以用来在共享内存(shared memory)上创建视图。与ArrayBuffer不同的是,SharedArrayBuffer不能被转移。

1.1 分配和共享内存

为了将一个SharedArrayBuffer对象从一个用户代理共享到另一个用户代理(另一个页面的主进程或当前页面的一个worker),从而实现共享内存,我们需要运用postMessage和结构化克隆算法。

结构化克隆算法

var sab = new SharedArrayBuffer(1024);
worker.postMessage(sab);

这两个SharedArrayBuffer对象指向的共享数据块其实是同一个,所以某一代理对数据块的修改在另一个代理中可见。

1.2 原子操作更新及同步共享内存

共享内存能被同时创建和更新于worker线程或主线程。依赖于系统(CPU、操作系统、浏览器),变化传递给所有上下文环境需要一段时间,因此需要通过原子操作来进行同步。

多个共享内存的线程能够同时读写同一位置上的数据。原子操作会确保正在读或写的数据的值是符合预期的,即下一个原子操作一定会在上一个原子操作结束后才会开始,其操作过程不会中断。

 Atomics - JavaScript | MDN

 2 锁和条件变量

使用Atomics提供的基础API,可以实现锁和信号量的同步原语。

 锁的定义源码:

https://github.com/mozilla-spidermonkey/js-lock-and-condition

 使用锁的案例:

GitHub - rogeryi/offscreen_canvas_demo: Offscreen Canvas Demo

不使用多线程跑不动 40 帧,使用多线程可以跑到 55 帧左右,性能提升了 30% 左右。

3 结语

Web 技术继续向前演进的其中一个使命: 让大型游戏引擎和 3A 游戏在 Web 上运行,在技术上成为可能。 WebAssembly,OffscreenCanvas,SharedArrayBuffer 等技术的发展使其逐渐成为可能。

WebAssembly:大型游戏引擎一般使用 C/C++ 编写,游戏的业务和控制逻辑使用脚本语言或者动态语言,WebAssembly 可以将引擎或者引擎核心的代码编译成可以在 Web 上运行的 Binary Code,引擎包裹层和游戏业务逻辑可以使用 JavaScript 编写;

SharedArrayBuffer 和 Atomics 为 WASM 提供了线程间共享内存和同步原语,为需要使用多线程并发的游戏引擎运行提供了相应的机制;

OffscreenCanvas 使得游戏引擎可以运行在 Worker 线程,不会阻塞主线程,也不会被主线程阻塞,可以使用线程同步原语实现多线程并发(主线程是不允许使用 wait 的),同时 OffscreenCanvas 使得 Canvas 的更新不会被 DOM 更新所阻塞,提供了更高性能的 Canvas 2D/3D 渲染流水线;

 

相关内容

热门资讯

各有各的精彩高三作文【优秀4... 各有各的精彩高三作文 篇一我的高三生活高三是人生中最为关键的一年,我也在这一年里经历了许多精彩的事情...
高考优秀作文:着眼现在面向未... 高考优秀作文:着眼现在面向未来 篇一题目:科技进步与人类命运字数:600字随着科技的不断进步,人类的...
简短激昂的高三誓词(优质3篇... 篇一:简短激昂的高三誓词高三,是我们追梦的起点,也是我们奋斗的终点。在这个阶段,我们要面对严峻的学业...
北京高考满分作文欣赏附题目【... 北京高考满分作文欣赏附题目 篇一题目:"城市绿化与人们的生活质量"字数:614城市绿化与人们的生活质...
高考英语必考60个重要句型【... 高考英语必考60个重要句型 篇一第一篇内容高考英语是每个高中生都面临的重要考试,而掌握一些常用的句型...
获科技创新大赛奖高考考生没有... 获科技创新大赛奖高考考生没有保送资格 篇一近年来,随着科技的迅猛发展,科技创新大赛在各个学校和地区之...
高考满分作文:踮起脚尖(通用... 高考满分作文:踮起脚尖 篇一踮起脚尖,攀登高峰踮起脚尖,这是一种努力,一种追求,以及一种勇气。对于高...
高考乙卷优秀作文范文(精选6... 高考乙卷优秀作文范文 篇一自信的力量自信是一种强大的力量,它能够推动我们不断前进,克服困难,实现自己...
高考作文题目及范文【最新3篇... 高考作文题目及范文 篇一题目:人与自然的和谐关系范文:人与自然的和谐关系一直是人类社会发展的重要命题...
高考生家长:家长必知的十点建... 高考生家长:家长必知的十点建议 篇一在高考这个重要的阶段,家长的作用举足轻重。作为家长,我们应该给予...
文科高考志愿个人陈述范文【精... 文科高考志愿个人陈述范文 篇一我一直对文科充满兴趣,因此在选择高考志愿时,我毫不犹豫地选择了文科方向...
历年安徽高考满分作文赏析:勇... 历年安徽高考满分作文赏析:勇于挑战,敢于质疑 篇一勇于挑战,敢于质疑,是一种积极向上的心态和精神品质...
2019高考经典范文大全(经... 2019高考经典范文大全 篇一高考改革:探索多元评价体系随着社会的发展和教育观念的变革,高考改革已经...
高考英语作文加分高级句型【精... 高考英语作文加分高级句型 篇一:如何提高英语写作能力英语写作是高考英语考试的重要组成部分,也是考生们...
高考满分作文好句摘抄【通用3... 高考满分作文好句摘抄 篇一第一篇内容高考是每个学生都无法绕开的一道坎,它是一次考验也是一次机遇。在高...
高考预测作文:期待,生命不合... 高考预测作文:期待,生命不合理是可能的 篇一期待,生命不合理是可能的生命是一个奇妙而不可预测的旅程,...
光头的背后:《非诚勿扰》孟非... 光头的背后:《非诚勿扰》孟非 篇一在中国的相亲节目中,《非诚勿扰》无疑是最受欢迎的一档。而这档节目的...
冲刺高考励志作文【推荐6篇】 冲刺高考励志作文 篇一奋斗的力量高考,是每个学生心中的一块巨石。在这个关键的阶段,每个人都希望能够以...
浙江高考满分作文:人生应读三... 浙江高考满分作文:人生应读三本书 篇一人生应读三本书在我们的一生中,书籍扮演着重要的角色,它们不仅是...
高考满分议论文【精彩6篇】 高考满分议论文 篇一高考满分:是成功的唯一标准吗?高考作为我国教育体制的重要组成部分,一直以来备受争...