为了在大型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所建议的那样,但我必须提前知道这种类型。
有没有解决方案?
答案 0 :(得分:2)
我相信答案是否定的,至少目前是这样。
Bugzilla上有一个相关的bug:
SharedArrayBuffer规范说在SharedArrayBuffer上允许DataView,DataView上的SharedArrayBuffer.isView()应该返回true。目前Firefox中的情况也不是这样。