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

Ден*_*кий 25 v8 process core node.js clusterize

  • 我理解正确cluster吗:如果我使用包,是否意味着为每个创建的工作人员创建一个新的节点实例?

  • clusterworker_threads包有什么区别?

sne*_*mer 50

实际上,您的不同之处在于基于进程基于线程的. 线程共享内存(例如SharedArrayBuffer)而进程不共享。从本质上讲,它们绝对是同一回事。

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

工作线程

  • 工序
  • 创建多个线程,每个线程有一个 Node 实例(一个事件循环,一个 JS 引擎)。除了少数几个,大多数 Node API 可用于每个线程。所以本质上 Node 是嵌入自己并创建一个新线程。
  • 与其他线程共享内存(例如SharedArrayBuffer
  • 非常适合 CPU 密集型任务,例如处理数据或访问文件系统。因为 NodeJS 是单线程的,所以可以通过 worker 来提高同步任务的效率

  • 每个工作线程都有自己的 V8 实例和事件循环。这就是获得并行性的方法。他们称之为 V8 分离株。实际上,这是一个独立的 V8 运行时实例,拥有自己的 JS 堆和微任务队列。因此,每个 Node.js 工作线程都可以独立运行其代码,而无需共享其堆。沟通; 然而,这是通过子级和父级之间的消息通道发生的。 (5认同)