代码之家  ›  专栏  ›  技术社区  ›  Chong Lip Phang

如何实现SharedArrayBuffer和原子的并行性?

  •  6
  • Chong Lip Phang  · 技术社区  · 8 年前

    ECMA-2017(ES8),大约一个月前刚刚定稿,介绍了 SharedArrayBuffer Atomics 这个 link here

    正如我们所知,它们旨在允许跨线程共享数据。我想知道这种并行性是如何在浏览器和节点中实现的?我们应该分别使用Web Workers和“集群”包吗?

    2 回复  |  直到 6 年前
        1
  •  4
  •   trincot Jakube    8 年前

    SharedArrayBuffers Atomics 拟用于 with WebWorkers ,这是在浏览器上下文中让代码在并发线程中运行的自然方式。

    对于节点。在js中,集群包生成的线程确实可以作为共享数据的候选线程,但在编写本文时,确实存在 no implementation of SharedArrayBuffers 在节点中。这是理论。您可能需要浏览关于它的几个讨论:

    已经有了 ems 允许在不同线程和进程之间共享数据的包。

    相关:

        2
  •  1
  •   Mohamed Allal    5 年前

    对于NodeJ,正式支持SharedArrayBuffer和Array buffer!文件中直接提到了它们 https://nodejs.org/api/worker_threads.html

    与child\u进程或集群不同,worker\u线程可以共享内存。他们 ArrayBuffer公司 实例或共享 实例。

    共享缓冲区和原子:

    https://www.sitepen.com/blog/the-return-of-sharedarraybuffers-and-atomics/

    快速片段(来自文章):

    
    // Creating a shared buffer
    const length = 10;
     // Get the size we want in bytes for the buffer
    const size = Int32Array.BYTES_PER_ELEMENT * length;
     // Create a buffer for 10 integers
    const sharedBuffer = new SharedArrayBuffer(size);
    const sharedArray = new Int32Array(sharedBuffer);
    

    // main.js
    worker.postMessage(sharedBuffer);
    

    该缓冲区允许我们在工作端创建另一个共享阵列:

    // worker.js
    constsharedArray = new Int32Array(m.data);
    

    检查 标题为一个很好的介绍!(太长,无法在此处定位)。

    来自MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics

    https://blog.logrocket.com/a-complete-guide-to-threads-in-node-js-4fa3898fe74f/

    也检查一下:

    https://stackoverflow.com/a/51411795/7668448

    推荐文章