【问题标题】:What's the difference between Web Workers and Worker Threads?Web Worker 和 Worker 线程有什么区别?
【发布时间】:2020-06-01 17:58:08
【问题描述】:

我找不到任何资源来解释 Web Worker (https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers) 和最近发布的 Worker Threads (https://nodejs.org/api/worker_threads.html#worker_threads_worker_threads) 之间的区别,它们已经存在多年并启用了 PWA在 Node.js 中。

据我了解,两者都是允许 JavaScript 在多个线程中运行代码的简单方法。那么为什么 Worker Threads 被作为“新”事物发布呢?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    Web Workers 是一种存在于浏览器中的技术。

    工作线程是一种存在于node.js中的技术。

    他们有着相似的目标,但是由于环境的不同,他们有不同的实现方式。

    据我了解,两者都是允许 JavaScript 在多个线程中运行代码的简单方法。

    是的,没错。存在重大限制,例如无法访问与主线程和浏览器中相同的变量,也无法访问 DOM。线程和主线程之间的通信一般是通过消息传递来完成的。

    那么为什么工作线程会作为“新”事物发布呢?

    在“新”工作线程之前,Node.js 无法在线程中运行 Javascript 代码。 node.js 从来没有 Web Workers。 Web Workers 在浏览器中已经存在了一段时间。在 Worker Threads 之前,开发人员必须使用多个进程来涉及额外的 CPU 或防止 CPU 密集型代码阻塞事件循环。现在,node.js 开发人员可以使用 Worker Threads 做到这一点。

    【讨论】:

    • Nodejs 确实有 spawnchild/cluster.. 但不同之处在于集群运行在 cpu 的新核心上,而线程运行在同一个核心上。您可以在单个 cpu 上使用多个线程,但理想情况下每个内核 1 个线程。
    • @MuhammadUmer - 现代操作系统也使用多核线程。
    • 线程不是与单个内核关联的,因此线程将始终保留在它启动时所在的内核中。单个内核可以有 N 个线程。 X 核可能有 N*X 线程。最后一点是每个核心的线程越少越好,这是由于“上下文切换”的成本
    • @MuhammadUmer - 当一个线程实际执行时,它不会从一个核心跳转到另一个核心,但如果操作系统将其时间分割以让其他线程公平运行,它可以回来在任何核心上,除非它绑定到特定核心。 Plus 线程不绑定到其父进程正在运行的核心。请记住,在现代操作系统中,已经有许多其他线程是运行操作系统的一部分。当我现在在我的 Windows 10 系统上查看 Process Explorer 时,已经有数百个线程。
    • 最好澄清一下为什么他们不只是在 Node.js 中实现 Web Workers,而不是创建一个新的 API,即 API 有何不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2015-01-06
    相关资源
    最近更新 更多