首页 > 解决方案 > 'cluster' 和 'worker_threads' 如何在 Node.js 中工作?

问题描述

标签: node.jsprocessv8coreclusterize

解决方案


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

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

工作线程

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

推荐阅读