读取 SharedArrayBuffer 中的内存

Read Memory in SharedArrayBuffer

为了尝试对大型 TypedArray 进行并行处理,我尝试使用名为 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: expected ArrayBuffer, got SharedArrayBuffer

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

有解决办法吗?

我认为答案是否定的,至少目前如此。

Bugzilla 上有一个相关的 bug

The SharedArrayBuffer spec says that DataView is allowed on SharedArrayBuffer, and that SharedArrayBuffer.isView() on a DataView should return true. Neither is the case in Firefox at the moment.