【问题标题】:Can you share WebAssembly memory between Web Workers?你可以在 Web Workers 之间共享 WebAssembly 内存吗?
【发布时间】:2020-01-20 07:33:47
【问题描述】:

是否可以使用 postMessage 在 2 个工作人员之间共享 WebAssembly.memory,比如 SharedArrayBuffer?如果答案是肯定的,怎么做?

【问题讨论】:

    标签: javascript shared-memory web-worker webassembly


    【解决方案1】:

    您可以通过 JavaScript API 创建 WebAssembly 共享内存实例:

    const memory = new WebAssembly.Memory({
      initial: 80,
      maximum: 80,
      shared: true
    });
    

    然后您可以通过postMessage 将此内存实例发送给 Web Worker:

    const worker = new Worker("worker.js");
    worker.postMessage({ memory });
    

    文件worker.js 然后可以使用这个共享内存实例创建一个 WebAssembly 模块,允许它在不同线程中的模块实例之间共享。

    有关更完整的示例,请参阅此博客文章:

    Faster Fractals with Multi-Threaded WebAssembly

    【讨论】:

    • 非常感谢!我已经写了好几次你的帖子,我很想和你谈谈。在 worker.js 中我可以使用一些指令,比如我们在 JS 中用于 SharedArrayBuffer 的指令吗?如果您向我介绍一个与您交谈的链接,我将不胜感激。
    • 我想在无限循环中从 0 开始递增内存内容,并在需要时在代码中读取它的值。而我的问题是:如何在worker中实现这部分代码以及如何阅读?谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-07-16
    • 2014-10-30
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2018-03-03
    相关资源
    最近更新 更多