Child_process 和 Worker Threads 有什么区别?

2024-01-18

我试图理解ThreadingNodeJS 及其工作原理。

目前我的理解是:

Cluster: -

  • 构建在 Child_process 之上,但 TCP 分布在集群之间。
  • 最适合分配/平衡传入的 http 请求,但不适合 CPU 密集型任务。
  • 通过利用 cpu 中的可用核心来工作,通过在其他核心上克隆 nodeJS Web 服务器实例。

子进程:

  • 还可以使用不同的可用内核,但这很糟糕,因为它会创建虚拟内存,因此需要花费大量资源来分叉子进程。

  • 分叉进程可以通过事件与主线程通信,反之亦然,但分叉进程之间没有通信。

工作线程:

  • 与子进程相同,但分叉进程可以使用以下方式相互通信bufferArray

1) Why worker threadschild process我们什么时候应该使用它们?

2)如果我们有 4 个核心,并且集群/分叉 NodeJS Web 服务器 4 次(每个核心 1 个进程),那么我们使用worker threads(没有可用的核心)?


您在工作线程下提到了一点,它们本质上与子进程相同。但实际上并非如此。

另一方面,进程有自己的内存空间,线程使用共享内存空间。

线程是进程的一部分。进程可以启动多个线程。这意味着在进程下启动的多个线程共享为该进程分配的内存空间。

我想上面的观点回答了你的第一个问题,为什么线程模型比进程更受青睐。

第二点:假设处理器一次可以处理 4 个线程的负载。但我们有 16 个线程。然后他们都会开始共享CPU时间。

考虑到 4 核 CPU,4 个线程有限的进程可以更好地利用它,但当线程数很高时,所有线程将开始共享 CPU 时间。 (当我说所有线程将开始共享 CPU 时间时,我没有考虑进程的优先级和良好性,甚至没有考虑同一台计算机上运行的其他进程。)

我关于时间切片和 CPU 负载共享的快速搜索:

  1. https://en.wikipedia.org/wiki/分时 https://en.wikipedia.org/wiki/Time-sharing
  2. https://www.tutorialspoint.com/operating_system/os_process_scheduling_qa2.htm https://www.tutorialspoint.com/operating_system/os_process_scheduling_qa2.htm

本文甚至回答了进程之间的切换如何降低整体性能。

工作线程本质上与任何其他编程语言中的线程相似。

您可以查看此线程以总体了解 线程和进程的区别:进程和线程有什么区别? https://stackoverflow.com/questions/200469/what-is-the-difference-between-a-process-and-a-thread?rq=1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Child_process 和 Worker Threads 有什么区别? 的相关文章

  • Node.js - 使用 XHR 进行强大的上传

    我尝试实现一个简单的 XHR 上传到 Node js 通过强大 https github com felixge node formidable 问题是如果我设置 xhr setRequestHeader Content Type mult
  • 如何让 webpack 和 iis express 协同工作?

    I have Angular 2 和 Webpack 2 入门 https github com qdouble angular webpack2 starter它通过 webpack dev server 在节点上运行 我如何使用 web
  • Node.js 如何读取一个文件,然后使用两个单独的函数写入同一个文件?

    我想要做的是读取文件 然后在写入文件时能够使用该信息执行其他操作 例如 读取文件 写入文件并同时执行MD5哈希 数字签名等 我可以使用 fs readfile 和 fs writefile 作为一项操作 只需将文件从 Web 服务器复制到我
  • Dialogflow 简单的授权方法

    是否存在将 Dialogflow 代理连接到的简单方法node js代码 当我将此代码与从 Dialogflow 代理的设置页面获取的正确项目 ID 一起使用时 出现以下错误 错误 获取应用程序默认凭据时出现意外错误 无法加载默认凭据 浏览
  • require('babel/register') 不起作用

    我在客户端上有一个用 ES6 编写的同构应用程序Babel 转译器 http babeljs io 我希望我的 Express 服务器具有与客户端代码相同的 ES6 语法 很遗憾require babel register 不起作用 服务器
  • 无法从 bash 脚本使用 nvm

    我正在尝试编写一个 shell 脚本来自动设置我的开发环境 安装 python nvm node mongo 等 我正在使用 nvm 来安装 Node js 它告诉您关闭并重新打开终端以开始使用 nmv 命令 我尝试获取 bashrc 和
  • 如何使 ScheduledExecutorService 在计划任务取消时自动终止

    我正在使用一个ScheduledExecutorService如果网络连接已打开超过几个小时 则关闭该连接 然而 在大多数情况下 网络连接在超时之前就关闭了 所以我取消了ScheduledFuture 在这种情况下 我还希望执行程序服务终止
  • 如何在socket.io Nodejs服务器上列出房间

    在问题取得进展后如何创建socket io多播组 https stackoverflow com questions 6616922 how to create socket io multicast groups 6624604 6624
  • java:如何设置全局线程ID?

    是否有可能为线程设置唯一ID 在分布式系统中 线程是在许多不同的机器上创建的 例如通过 RMI 我需要它来创建日志消息 根据我的研究 我知道可以使用 log4j mdc ndc 来完成 但只能在单线程中完成 我的问题是 在创建线程时必须设置
  • NPM 如何处理版本冲突?

    由于 NPM 版本 3 节点模块和依赖项都安装在同一根级别 但是 如果我安装两个依赖于同一模块的两个不同版本的模块怎么办 例如 如果我安装异步npm i email protected cdn cgi l email protection
  • 通过 Node.js 运行 bash 脚本 - 非法选项 -o pipelinefail

    我正在尝试使用 Node js 执行 bash 脚本child process exec 然而它在文件的第二行爆炸 usr bin env bash set eo pipefail TRACE set x echo we are here
  • 如何在 Sails.js 中嵌入和编写 mongo 对象(超过一层深度)?

    从 sails js 示例来看 Person js var Person attributes firstName STRING lastName STRING age type INTEGER max 150 required true
  • 阻止 Mongoose 为子文档数组项创建 _id 属性

    如果您有子文档数组 Mongoose 会自动为每个子文档创建 id 例子 id mainId subDocArray id unwantedId field value id unwantedId field value 有没有办法告诉 M
  • MongoDB 中两个集合之间的 Diff()

    我做过研究 如果这是一个重复的问题 我很抱歉 但其他问题的解决方案并不适合我 因此 我提出了一个新问题 使用 Javascript 比较两个集合的最佳方法是什么 我有数千个这样的 Mongo 文档格式的标头 url google com h
  • MongoDB insertMany 并跳过重复项

    我试图insertMany https docs mongodb com manual reference method db collection insertMany 项目进入我的 Mongo 数据库 但我想跳过重复的 ID 我在用着N
  • browserify 错误 /usr/bin/env: 节点: 没有这样的文件或目录

    我通过 apt get install 安装了 node js 和 npm 以及所有依赖项 然后安装了 browserify npm install browserify g 它完成了整个过程 看起来安装正确 但是当我尝试为此做一个简单的捆
  • 线程独占数据:如何存储和访问?

    NET 中是否有可能将对象实例绑定到线程的当前执行上下文 这样在代码的任何部分我都可以做类似的事情CurrentThread MyObjectData DoOperation 并确保我访问特定于线程的数据 谢谢 你可以看一下线程静态属性 h
  • NodeJS 无法加载 css 文件

    所以我正在尝试制作一个 NodeJS 服务器 并且我尝试保留尽可能少的附加组件 但是 我遇到了一个问题 我似乎无法加载任何内容CSS我调用的文件HTML文件 该调用似乎确实由服务器处理 但它不会显示在浏览器中 My 网络服务器 js fil
  • 如何执行密集的 Node.js 计算

    我正在开发一个电子商务应用程序 每次产品从服务器发送到客户端时都必须重新计算产品的定价 每次发送多达数千个产品 计算部分本身相当密集 因为它需要多个数据库查询来计算 我的简单解决方案是将计算部分抽象到另一个专门用于计算的 Node js 应
  • 从 Node.js 调用 execl、execle、execlp、execv、execvP 或 execvp 的方法

    POSIX 系统公开了一系列exec函数 允许人们将可能不同的东西加载到当前进程中 保留打开的文件描述符 进程标识符等 可以出于多种原因执行此操作 在我的情况下 这是引导 我想更改我自己的进程的命令行选项 然后在现有进程上重新加载它 这样就

随机推荐