在SharedArrayBuffer中读取内存

时间:2016-05-24 17:50:50

标签: javascript web-worker arraybuffer

为了在大型TypedArrays上并行化处理,我尝试使用名为SharedArrayBuffer的mozilla扩展。

这些对象允许并发工作者(或主线程)处理相同的内存(postMessage的调用者不会使用它)。

不幸的是,它出现我无法读取这些对象的内存我不能在它们上使用DataViews。

我使用DataViews尝试了以下操作以避免整个缓冲区副本:

var arrayBuffer = new SharedArrayBuffer(4); // 4 bytes
var dataView = new DataView(new SharedArrayBuffer(4)); // fails with error below
// some usage here
var first = dataView.getFloat32(0)

失败并显示错误:

  

TypeError:DataView:期望的ArrayBuffer,得到SharedArrayBuffer

我可以通过从缓冲区返回一个TypedArray来读取内存,但是这会克隆内存,因此会破坏共享内存的性能提升,因为它似乎有一个小的开销,比如正如bug answer所建议的那样,但我必须提前知道这种类型。

有没有解决方案?

1 个答案:

答案 0 :(得分:2)

我相信答案是否定的,至少目前是这样。

Bugzilla上有一个相关的bug

  

SharedArrayBuffer规范说在SharedArrayBuffer上允许DataView,DataView上的SharedArrayBuffer.isView()应该返回true。目前Firefox中的情况也不是这样。