我需要在我的应用程序中实现像 Web Workers 这样的多线程,我们计划在其中使用 Spidermonkey 来执行 javascript。我想要这样的 API:
function BackgroundWorker() {
// do something
}
someglobalobject.spawnWorker(BackgroundWorker);
其中 someglobalobject.spawnWorker 是一个 C 绑定,它产生线程(如果 worker 被延迟,则不会产生),创建新的 JSContext,将函数BackgroundWorker传输到该上下文并执行它。我们计划通过与worker之间的消息传递来实现资源共享(worker可以注册一些事件挂钩或通过C绑定调用接收消息),也可能通过C绑定到某种共享内存(可能是STM)。充其量我们想为 JS 实现某种 Erlang 风格的演员。所以我有几个问题:
- 有没有一些例子可以实现这个东西(但不像 Web Workers 那样复杂)?
- JSContext 的足迹是什么?可能会创建很多,还是会导致一些性能瓶颈?
- 是否有能力在从该 JavaScript 调用的某个 C 绑定中暂停 JavaScript 执行?