【问题标题】:What does the Atomics object do in JavaScript?Atomics 对象在 JavaScript 中的作用是什么?
【发布时间】:2018-06-29 00:18:27
【问题描述】:

这是MDN documentation on Atomics

我不明白如何在现实生活中使用原子对象,或者它们是否仅供内部使用(即根本不打算调用)。

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

【问题讨论】:

标签: javascript atomic


【解决方案1】:

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

主要思想是为 JavaScript 带来某种多线程特性,以便 JS 开发人员可以在未来编写高性能的并发程序,允许自己管理内存,而不是让 JS 引擎管理内存。

这是由一种名为SharedArrayBuffer 的新型全局对象完成的,它本质上将数据存储在共享内存空间中。所以这些数据可以在主 JS 线程和 web-worker 线程之间共享。

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

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

让我们等待一些新的抽象库,它将使用这些 API 的权利。

shared memory and atomics

a cartoon intro to SharedArrayBuffers

JavaScript: From Workers to Shared Memory

ECMAScript 2019. Memory Model

Avoiding race conditions in SharedArrayBuffers with Atomics

还推荐查看tutorial 关于 ECMAScript 中的共享内存。

【讨论】:

    【解决方案2】:

    多线程编程的危险

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

    要解决之前的问题,我们可以做什么?

    使用原子选项

    Atomics 对象提供原子操作,例如 add、sub、and、or、xor、load、store 等作为静态方法。它们与 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>

    【讨论】:

      猜你喜欢
      • 2018-02-02
      • 2014-10-14
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 2011-01-05
      相关资源
      最近更新 更多