Worker 线程简介

Worker 线程简介

至 __ 要更好地理解工作线程的概念,我们首先要记住 Node 是如何工作的。默认情况下,Node 有一个执行线程,所有请求或需要的任务或操作都在其中执行。当进程非常大,或者消耗大量cpu资源时,它们会减慢进程,因为它必须首先完成处理,以便主线程可以继续执行其他任务。

如果您的代码或进程需要大量使用处理器,例如对发生在内存中的大量数据进行复杂计算,则该代码可能会阻塞事件循环并阻止处理其他请求。

接下来我们将看到Node执行过程的解释性说明:

工作线程的实现:

从 Node 10 版本开始,Worker 线程作为实验特性引入,从 12 版本开始,它变得稳定。工作线程允许我们将主 Node 线程划分为不同的线程,以便分配一些需要大量 cpu 资源并以更优化和更快的方式完成的任务的执行负载。此外,这有助于防止执行的主线程崩溃。

接下来我们将看到一个解释性的说明使用工作线程执行 Node 的过程:

worker_threads 模块允许使用并行执行 JavaScript 的线程。与 child_process 或 cluster 不同,worker_threads 可以共享内存。他们通过传递 ArrayBuffer 或共享 SharedArrayBuffer 实例来做到这一点。工作线程负责执行主线程指定的一段代码。每个工人都与其他工人隔离运行。但是,worker 及其父级可以通过消息传递通道交换消息。

工作线程的特点:

  • 数组缓冲区 用于将内存从一个线程转移到另一个线程。
  • 共享数组缓冲区: 允许您在线程之间共享内存。
  • 原子: 允许您更高效地同时运行某些进程,并允许您在 JavaScript 中实现条件变量。
  • 消息端口: 它用于不同线程之间的通信。它可用于在不同 Worker 之间传输结构化数据、内存区域和其他 MessagePort。
  • 消息频道: 表示用于在不同线程之间进行通信的异步双向通信通道。
  • 工人数据: 用于传递启动数据。一个任意 JavaScript 值,其中包含传递给此线程的 Worker 构造函数的数据的克隆。数据被克隆,就像使用 postMessage 一样。

在这里,我们看到了在我们的进程中使用工作线程可以获得的一些好处:

  • 多线程。
  • 每个线程一个事件循环。
  • 每个线程一个 JS 引擎实例。
  • 每个线程一个节点实例。

总之,工作线程在要求大量计算或大型进程占主导地位的要求大量 CPU 使用的进程中非常有用。工作线程可以将任务的执行分成几个部分,以便分配负载并使其处理更加优化。此外,值得一提的是,在 Chrome 的 DevTools 中,您可以检查 Node 工作线程。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/11564/44500311

posted @ 2022-09-03 11:45  哈哈哈来了啊啊啊  阅读(339)  评论(0)    收藏  举报