“集群”和“worker_threads”在 Node.js 中如何工作?

问题描述 投票:0回答:1
  • 我理解正确吗:如果我使用

    cluster
    包,是否意味着 为每个创建的worker创建一个新的节点实例?

  • cluster
    worker_threads
    套餐有什么区别?

node.js v8 node-worker-threads
1个回答
71
投票

实际上,您的不同之处在于基于进程基于线程。线程共享内存(例如

SharedArrayBuffer
),而进程则不然。本质上它们绝对是同一件事。

集群

  • 每个CPU上启动一个进程,并且可以通过IPC进行通信。
  • 每个进程都有自己的内存和自己的 Node (v8) 实例。创建大量它们可能会产生内存问题。
  • 非常适合生成许多共享相同端口 b/c 的 HTTP 服务器,master 主进程会将请求复用到子进程。

工作线程

  • 一个过程总共
  • 创建多个线程,每个线程有一个 Node 实例(一个事件循环,一个 JS 引擎)。除少数线程外,大多数 Node API 均可用于每个线程。所以本质上 Node 正在嵌入自身并创建一个新线程。
  • 与其他线程共享内存(例如
    SharedArrayBuffer
  • 非常适合 CPU 密集型任务,例如处理数据或访问文件系统。由于 NodeJS 是单线程的,因此使用 Worker 可以使同步任务更加高效
© www.soinside.com 2019 - 2024. All rights reserved.