【问题标题】:Read Memory in SharedArrayBuffer读取 SharedArrayBuffer 中的内存
【发布时间】: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 所建议的那样,但我必须提前知道类型。

有什么解决办法吗?

【问题讨论】:

标签: javascript web-worker arraybuffer


【解决方案1】:

我相信答案是否定的,至少现在是这样。

Bugzilla 上有一个相关的bug

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

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 2017-08-14
    • 1970-01-01
    相关资源
    最近更新 更多