【问题标题】:How to share context between worker threads如何在工作线程之间共享上下文
【发布时间】:2021-11-04 03:05:13
【问题描述】:

我想在 node.js 应用程序中创建一个工作线程并将当前上下文传递给新线程,这样我就可以在新线程中访问我的变量和函数,是否有库支持那?如果不能,我至少可以在它们之间传递一个匿名函数吗?

【问题讨论】:

  • 线程的概念是它们与其他进程完全隔离,因为它们运行在不同的 cpu 内核上并且可能处于完全不同的状态/速度。这就是为什么您无法访问启动它的原始线程。
  • @Kokodoko 在其他编程语言中这是可能的,所以我认为这不是技术限制,而是 Node.js 团队的意识形态。
  • @dev3dev JavaScript 传统上是同步运行的。因此,它不知道信号量。但是信号量对于在两个或多个并行运行的线程之间共享数据是必要的。

标签: javascript node.js v8 worker-thread node-worker-threads


【解决方案1】:

无法与工作线程共享上下文。这不是“Node.js 团队的意识形态”,而是 JavaScript 语言的限制,它不允许并发(例如从工作线程并发访问对象)。

一个例外是您可以使用SharedArrayBuffer 在多个线程之间共享数值数据。

除此之外,向工作线程发送数据或从工作线程接收数据的方法是使用postMessage。另请参阅 Node 的完整版 worker threads documentation

为了完整性:有一个early-stage proposal 用于向 JavaScript 添加一种新的跨线程可共享对象。与所有早期提案一样,无法保证最终会最终确定或可能需要多长时间,但它确实表明人们对该领域有一些兴趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-20
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多