使用Emscripten Worker API传输数据而不进行复制

时间:2015-04-03 06:15:42

标签: javascript c++ c web-worker emscripten

有没有办法让Emscripten在Web worker和主UI线程之间传输而不是复制数据?

Emscripten有一个API that manages communication between Web Workers,我认为它只是使用了postMessage / onmessage机制。查看Emscripten Worker API的来源,似乎在调用transferList没有使用postMessage选项,因此数据获取复制。

实际上,我认为它至少被复制了两次:首先是线程之间的浏览器,然后是second time by Emscripten,以使其进入Emscripten管理的堆空间。如果您希望数据在回调后继续在接收端生存,则必须第三次复制,因为according to the docs传递给回调的数据仅保证在回调期间存在。 / p>

从顶部重复我的问题:有没有办法让Emscripten通过在Web工作者和主UI线程之间传输而不是复制数据来避免所有这些复制?

1 个答案:

答案 0 :(得分:1)

如果您使用SharedArrayBuffer,则可以这样做。最近,Emscripten的人添加了experimental support for pthread in Emscripten,它使用了这个功能。但是,目前只有Firefox夜间支持SharedArrayBuffers,因此尚未广泛采用。