【发布时间】:2016-05-24 17:50:50
【问题描述】:
为了对大型 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 所建议的那样,但我必须提前知道类型。
有什么解决办法吗?
【问题讨论】:
-
Lars Hansen 在bugzilla.mozilla.org/show_bug.cgi?id=1246597#c3 的回复似乎对于作为答案发布或更新/编辑此问题很有用。
-
固定问题。我测试了 new Float32Array() 的开销确实可以忽略不计
-
bug 已在 firefox 53 中修复:bugzilla.mozilla.org/show_bug.cgi?id=1246597
-
@RegisPortalez 一年后...哇!
标签: javascript web-worker arraybuffer