簡體   English   中英

傳遞 Int32Array 而不是 SharedArrayBuffer 應該有效嗎?

[英]Is passing Int32Array instead of SharedArrayBuffer supposed to work?

我有一些創建共享數組緩沖區並將Int32Array而不是SharedArrayBuffer傳遞給工作人員的代碼:

let worker = new Worker(...);
worker.postMessage({
  position: {
    x: createArray(),
    y: createArray()
  },
  velocity: {
    x: createArray(),
    y: createArray()
  }
});

function createArray(size = 1024) {
  let buffer = new SharedArrayBuffer(size);
  return new Int32Array(buffer);
}

在工作人員中,我在整個數組的循環中更新結果整數。

let components = e.data;

let velocityX = Atomics.load(components.velocity.x, shipEid);
let velocityY = Atomics.load(components.velocity.y, shipEid);
Atomics.add(components.position.x, shipEid, velocityX);
Atomics.add(components.position.y, shipEid, velocityY);

現在,我的問題是,將Int32Array傳遞給工作人員而不是SharedArrayBuffer是否有效? 老實說,直到很久以后我才意識到我正在這樣做,現在我意識到了,我想知道它為什么會起作用。 我認為您必須將SharedArrayBuffer傳遞給工作人員才能在工作人員和主進程之間共享內存。 這實際上是規范以這種方式工作的一部分,還是 Chrome 特定的東西會破壞其他瀏覽器並可能在未來破壞 Chrome?

是的,這是有效的。 請注意,您實際上也沒有傳遞Int32Array :您傳遞的對象的屬性是具有類型數組屬性的對象。 這是因為postMessage的參數實際上是在結構上克隆的,當克隆算法到達作為結構一部分的SharedArrayBuffer時, 它會被克隆到共享底層內存的新緩沖區對象中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM