【发布时间】:2018-11-17 23:12:15
【问题描述】:
这个和上一个问题WebAssembly in async code有关
基本上,这个问题是关于 WebAssembly 阻塞主线程的问题,而这个问题的答案是将 WebAssembly 代码移动到 web worker 中。这行得通。
现在的问题是 WebAssembly 阻塞了 worker 上的 onmessage()。
我长时间运行的 WebAssembly 代码具有 play()、pause()、stop() 等函数。play() 会定期检查暂停标志和停止标志以确定 play() 是否应该返回。 pause() 和 stop() 用于设置这些标志。
JavaScript 主线程调用 postMessage() 向 worker 发送消息,worker 进一步调用 play()。
由于 onmessage() 被阻塞,worker 将没有机会接收更多消息来执行 pause() 或 stop() 直到 play() 完成。这将破坏暂停/停止的目的。
WebAssembly 似乎无法支持播放/暂停/停止的简单用例。
有什么建议或建议吗?
顺便说一句,该用例得到了已停产的 Google PNaCl 的良好支持。
谢谢。
【问题讨论】:
标签: asynchronous emscripten webassembly