1

yanni's answer shows how to send (transfer ownership) one buffer to a web worker: Using transferable objects from a Web Worker

How would I send multiple buffers (in an array) to a web worker (without copying)?

4

2 回答 2

2

Worker#postMessage接受一组可转移对象,

var worker = new Worker("...");
var buffers = [new ArrayBuffer, new ArrayBuffer, new ArrayBuffer];
var message = {buffers: buffers};

worker.postMessage(message, buffers);

这是一个示例小提琴,http://jsfiddle.net/g247v/

于 2014-02-27T21:18:09.623 回答
2

这已经在其他地方得到了回答,但是在我最终在这里找到答案之前,谷歌首先把我带到了这里

您可以将多个缓冲区传递给网络工作者,而无需使用Transferable 对象执行复制:

工人案例,第一个参数是数据,第二个是应该转移的项目列表。顺便说一下,第一个参数不一定是 ArrayBuffer。例如,它可以是 JSON 对象:

worker.postMessage(
  {data: int8View, moreData: anotherBuffer},
  [int8View.buffer, anotherBuffer]
);
于 2020-04-16T09:16:36.757 回答