Atomics对象在JavaScript中做了什么?

ade*_*ago 18 javascript atomic

这是关于AtomicsMDN文档.

我无法理解原子对象如何在现实生活中使用,或者它们仅供内部使用(即根本不需要调用).

Atomics对象在JavaScript中有什么作用?我该如何使用它们?

BSe*_*zin 15

此功能是在ECMAScript 2017中引入的.Shared MemoryAtomics引入了一种新的内存模型,允许多代理程序使用原子操作进行通信,即使在并行CPU上也能确保良好定义的执行顺序.该规范还包括新的静态方法Object:Object.values,Object.entries,和Object.getOwnPropertyDescriptors.

主要思想是为JavaScript提供某种多线程功能,以便JS开发人员可以通过自己管理内存而不是让JS引擎管理内存来编写高性能的并发程序.

这是通过一种新类型的全局对象来完成的,该对象SharedArrayBuffer实际上将数据存储在共享内存空间中.因此,这些数据可以在主JS线程和Web工作线程之间共享.

您只需使用SharedArrayBuffer,主线程和多个Web工作线程都可以立即访问数据.

但是在线程之间共享内存会导致竞争条件.为了帮助避免竞争条件,Atomics引入了全局对象.Atomics提供了各种方法来在线程使用其数据时锁定共享内存.它还提供了安全地更新共享内存中的此类数据的方法.

让我们等一些新的抽象库,它将使用这些API.

共享内存和原子

SharedArrayBuffers的漫画介绍

JavaScript:从工人到共享内存

ECMAScript 2019.内存模型

使用Atomics避免SharedArrayBuffers中的竞争条件

还建议在ECMAScript中查看有关共享内存的教程.


I_A*_*ary 5

多线程编程的危险

  • 死锁
  • 不可预测
    的读写操作顺序
  • 数据碎片化

为了解决前面的问题,我们可以做什么?

使用原子选项

Atomics 对象提供原子操作,如添加、子和、或、异或、加载、存储等作为静态方法。它们与 SharedArrayBuffer 对象一起使用。

有关更多信息和一个很好的例子:来源:https : //www.slideshare.net/barakdrechsler/atomic-javascript

https://jirak.net/wp/introducing-new-javascript-optimizations-webassembly-sharedarraybuffer-and-atomics-in-edgehtml-16/

https://www.geeksforgeeks.org/atomics-or-in-javascript/

好的资源第 12 章 SharedArrayBuffer 在:

Phang, C. L. (2017). An Effective Guide to Modern JavaScript:(ECMAScript 2017/ES 8). Chong Lip Phang.

<iframe frameborder="0" scrolling="no" style="border:0px" src="https://books.google.com.tw/books?id=--gvDwAAQBAJ&lpg=PP3&ots=zqgshUnSQa&dq=atomic%20%20SharedArrayBuffer%20%20for%20javascript&lr&pg=PA80&output=embed" width=500 height=500></iframe>
Run Code Online (Sandbox Code Playgroud)