【发布时间】:2016-07-03 11:53:00
【问题描述】:
Javascript 允许将缓冲区从源线程转移到工作线程。否则,将复制 ArrayBuffer,然后将其传递给 worker。传输的缓冲区在源线程 [1] 中不可访问(“中性”):
// create data that can be transfered
var arr = new Uint8Array(5);
// outputs: 5
console.log(arr.buffer.byteLength);
var worker = new Worker("some_worker.js");
// transfer the buffer
worker.postMessage({arr: arr}, [arr.buff]);
// the buffer vanishes. is "Neutered"
// outputs: 0
console.log(arr.buffer.byteLength);
我了解该机制的工作原理。但是我很好奇为什么要引入它。为什么工作线程之间不共享数据,就像在传统的线程模型中一样,它允许多个线程访问相同的 内存区域?
同一问题的其他措辞进行澄清:
为什么缓冲区在传输时被绝育? / 这种机制背后的原因是什么? / 为什么要介绍它?为什么Workers之间不能共享内存区域?
我正在寻找来自可靠和/或官方来源的答案。
[1]https://developer.mozilla.org/en/docs/Web/API/Worker/postMessage
【问题讨论】:
-
谢谢,Michal Charemza。我在问题中添加了您的句子,因为这就是问题的原因。
标签: javascript web-worker