SharedArrayBuffer和SharedWorker。

问题描述 投票:1回答:1

在《ECMAScript 2017》的功能中,有以下内容 共享内存和原子.我在Google Chrome 59.0.3071.109中尝试测试它(实验性的SharedArrayBuffer标志被启用).当我尝试在简单的Worker中发布SharedArrayBuffer时,它可以工作。但是当我尝试在SharedWorker中post SharedArrayBuffer时,在onmessage事件处理程序的event.data is null。为什么会这样?下面是我的代码示例。

index.html:

<!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:

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:

self.onconnect = function (e) {
    var [port] = e.ports;

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

谢谢你

javascript web web-worker ecmascript-2017
1个回答
0
投票

根据Chromium 眨眼工人 文献。Shared Worker是Out-of-process。

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

操作 系统进程拒绝其他进程的内存访问,通过共享(访问)内存进行工作。

SharedArraybuffer 通过共享(访问)内存进行工作。所以说,系统进程拒绝其他进程的内存访问,通过共享(访问)内存进行工作。SharedArraybuffer 由JS主线程(document process)创建(access),不能由JS主线程访问。Shared Worker(进程外)。

© www.soinside.com 2019 - 2024. All rights reserved.