从专用worker访问共享worker



是否可以在同一个主线程创建的专用工作线程中访问在主线程中创建的共享工作线程?我最初的想法是否定的,因为这可能会导致很多并发问题,但我还没有完全了解WebWorkers的内部结构,还没有做出明确的决定。

我的用例是有一个专门的工作人员打开一个web套接字通道与服务器检索流数据源。然后,这些数据将被发送到一个共享的worker中,该worker将提供操作它的函数,并通过可转移的对象返回结果。我不想把这些对象组合成一个单一的工作者,因为我希望能够插入不同的模块来进行数据操作,并且不想要复制代码来与web套接字交谈。

是否可以在同一个主线程创建的专用工作线程中访问在主线程中创建的共享工作线程?

是的。只需创建一个SharedWorker作为子工作者(它将被共享),或者在共享工作者和专用工作者之间创建一个MessageChannel。

这会导致很多并发性问题

。worker之间的通信是事件化和异步的。

然后,这些数据将被发送到一个共享的工作线程,该工作线程将提供操作 的函数。

这听起来好像你不需要一个共享的worker。对于"提供函数",一个简单的库加载到专用的worker(它执行websocket通信)就足够了。你甚至可以动态加载库,在worker中使用某种依赖管理。没有必要复制web套接字代码。