Mic*_*mza 8 javascript c c++ web-worker emscripten
有没有办法让Emscripten在Web工作者和主UI线程之间传输而不是复制数据?
Emscripten有一个管理Web Workers之间通信的API,我认为它只是使用了引擎盖下的postMessage/ onmessagemechanism.查看Emscripten Worker API的源代码,它似乎在调用时不使用该transferList选项postMessage,因此数据将被复制.
实际上,我认为它至少被复制了两次:首先是线程之间的浏览器,然后是Emscripten第二次将它复制到Emscripten管理的堆空间中.如果您希望数据在回调后继续在接收端生存,则必须第三次复制,因为根据文档,传递给回调的数据仅保证在回调期间存在.
从顶部重复我的问题:有没有办法让Emscripten通过在Web worker和主UI线程之间传输而不是复制数据来避免所有这些复制?
如果您使用SharedArrayBuffer ,这是可能的。最近,Emscripten 人员在 Emscripten 中添加了对 pthread 的实验性支持,它使用了此功能。然而,目前只有 Firefox nightly 支持 SharedArrayBuffers,所以这还没有被广泛采用。