有没有办法让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线程之间传输而不是复制数据来避免所有这些复制?
答案 0 :(得分:1)
如果您使用SharedArrayBuffer,则可以这样做。最近,Emscripten的人添加了experimental support for pthread in Emscripten,它使用了这个功能。但是,目前只有Firefox夜间支持SharedArrayBuffers,因此尚未广泛采用。