SharedArrayBuffer突然有一天出现在眼前

突然有一天SharedArrayBuffer出现在你的眼前,不要惊慌不要心急,轻轻的我走了,正如我轻轻的来;我轻轻的招手,作别西天的云彩。那河畔的金柳,是夕阳中的新娘;波光里的艳影,在我的心头荡漾。软泥上的青荇,油油的在水底招摇;在康河的柔波里,我甘心做一条水草!停🤚

进入我们今天的正题😄

一、什么是SharedArrayBuffer

SharedArrayBuffer 即原始二进制数据的固定长度缓冲区,即共享缓冲区,类似于 ArrayBuffer,都是在大背景下诞生的可用于在共享内存上创建数据。

       大的背景是在一个应用程序中,工作都是由一个单独的人来完成的 -- 主线程。…… 打个比方主线程就像一个全栈开发人员,它负责 JavaScript、DOM 和布局,他做的事情特别多。帮助主线程从工作负载中减少任何工作都有助于性能的提升。但仅仅减少主线程的工作量是不够的,有时你需要更多帮手增援---➡️线程,在 JavaScript 中,这样做的方式是使用一个叫做 web worker。web worker 与您在其他语言中使用的线程略有不同,默认情况下,它们不共享内存。意味着你要与另一个线程共享一些数据,必须去复制它利用函数PostMessage 完成 。PostMessage 获取您放入其中的对象,将其序列化,并将其发送到其他 web worker,在那里它被反序列化并放入内存,最终这样下来,过程相当缓慢,尤其是大数据量。在许多你想要拥有高性能并行性的场景下,你真正需要的是拥有共享内存,SharedArrayBuffers 解决的就是这类问题。

      使用 SharedArrayBuffer,无论是 web worker 还是 线程(threads)都可以从同一内存块中写入数据和读取数据。这意味着他们没有 postMessage 的通信开销和延迟。web worker 的两端都可以立即访问数据。但是,这种方案仍然不尽完美,同时从两个线程 (threads)直接访问有一些危险,它会导致 竟态条件。在此先打上一个结,后面文章我们把它解开😧。

二、ArrayBuffer如何工作?

基本上就像使用其他任何JavaScript数组一样。除了使用ArrayBuffer,您不能在其中放入任何JavaScript类型,例如对象或字符串。唯一可以放入的内容是字节(可以使用number类型表示)。

ArrayBuffer基本上就像原始内存一样。它模拟了使用C等语言进行的直接内存访问。为什么我们不让程序员直接访问内存,而添加这一抽象层。原因是:直接访问内存会带来一些安全隐患。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weifont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值