【问题标题】:How do 'cluster' and 'worker_threads' work in Node.js?'cluster' 和 'worker_threads' 如何在 Node.js 中工作?
【发布时间】:2019-11-01 12:49:08
【问题描述】:
  • 我是否理解正确:如果我使用cluster 包,是否意味着 为每个创建的工作人员创建一个新的节点实例?

  • clusterworker_threads 包有什么区别?

【问题讨论】:

    标签: node.js process v8 core clusterize


    【解决方案1】:

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

    cluster

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

    worker threads

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

    【讨论】:

    • 对于worker_threads:总共一个进程。这是否意味着分布在多个 V8 实例中?
    • 每个工作线程都有自己的 V8 实例和事件循环。这就是您获得并行性的方式。他们称之为 V8 隔离。实际上,这是 V8 运行时的独立实例,具有自己的 JS 堆和微任务队列。因此,每个 Node.js 工作线程都可以在不共享它们的堆的情况下单独运行它的代码。沟通;但是,通过孩子和父母之间的消息通道发生。
    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2012-07-26
    • 2016-04-25
    • 2021-06-01
    相关资源
    最近更新 更多