首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SharedArrayBuffer和SharedWorker

SharedArrayBuffer和SharedWorker
EN

Stack Overflow用户
提问于 2017-06-25 09:01:48
回答 1查看 943关注 0票数 1

在ECMAScript 2017年的特性中,有共享内存与原子。我尝试在GoogleChrome59.0.3071.109中测试它(启用了实验SharedArrayBuffer标志)。当我尝试在简单工作者中发布SharedArrayBuffer时,它是有效的。但是,当我尝试将SharedArrayBuffer放在SharedWorker中时,在onmessage事件处理程序的事件旁,得到的event.data为null。为何会这样呢?下面是我的代码示例:

index.html:

代码语言:javascript
复制
<!doctype html>

<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Web Workers</title>
    <script src="main.js"></script>
</head>

<body>

<button onclick="post()">Post</button>
<button onclick="get()">Get</button>

</body>
</html>

main.js:

代码语言:javascript
复制
var worker = new SharedWorker('worker.js');
var buffer = new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT);
new Int32Array(buffer)[0] = 12;

function post() {
    worker.port.postMessage({buffer});
}

function get() {
    console.log(new Int32Array(buffer)[0]);
}

worker.js:

代码语言:javascript
复制
self.onconnect = function (e) {
    var [port] = e.ports;

    port.onmessage = function (e) {
        console.log(e.data);// null
    };
};

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-06-02 14:18:11

根据铬眨眼工人文档:共享工作人员处于进程之外。

它运行在与文档进程不同的另一个系统进程上(其中包含JS主线程)。

操作系统进程拒绝从其他进程访问内存。

SharedArraybuffer通过共享(访问)内存工作。因此,由JS主线程(文档进程)创建(访问)的SharedArraybuffer不能通过Shared Worker(进程外)访问。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44744815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档