Apache 每个请求都会生成一个线程,而 Node.js 不会,这是什么意思?

2023-12-23

我读过有关node.js 和其他服务器(例如Apache)的信息,它们的线程是不同的。我根本不明白线程是什么意思。

如果我有一个运行 SQL 来访问数据库的网页,例如一个服务器端页面中的三个不同数据库,这对于 Node.js 中的线程意味着什么?阿帕奇?这里的“线程”是什么意思?

或者正如我看到的一篇文章,“启动一个新线程来处理每个请求”。

Apache 每个请求都会生成一个线程,而 Node.js 不会,这是什么意思?

编辑:我希望有一个我能掌握的例子。我习惯于使用访问数据库的服务器端页面。该文件内有几个连接。


线程是程序执行的上下文。单线程程序一次只能做一件事,而多线程程序可以一次做很多事情。

可以把它想象成餐厅的厨房。一个厨师实际上一次只能完成一项任务,比如切洋葱或将东西放入烤箱。如果收到的订单需要厨师做大量工作(例如制作沙拉与将东西放入烤箱并等待),则某些餐点可能会因为厨师很忙而延迟。另一方面,如果厨师只需要烤一堆东西,那么他就没有太多工作要做,他可以在等待烤箱中的食物完成的同时做其他饭菜。

如果有多名厨师,其中许多任务可以同时完成。可以同时准备许多餐点。

Apache 的线程模型就像雇佣固定数量的厨师(不管你的餐厅当晚有多少顾客),每个厨师一次只能做一顿饭。这意味着,如果收到餐食订单,则会指派一名专门的厨师来处理该餐食。有时,厨师会忙着切碎原料和混合蛋糕面糊,但有时他只是站在那里等待土豆煮沸。在任何给定时间,您的大多数厨师都可能闲着,等待土豆煮沸和蛋糕烘烤,并且不会再处理更多订单,因为每个厨师一次只专注于一份订单。

更糟糕的是,你的厨房只有你能负担得起的大小。每个厨师都会占用空间和资源,您可能会遇到这样的情况:一群厨师拿着唯一可用的勺子站在周围,阻止其他厨师制作食物。

Nginx 是另一个您没有询问的 Web 服务器(通常用作代理),但我将其包括在内是为了解释另一个线程模型。它还雇用固定数量的厨师,但雇用的人数较少。每个厨师可以同时制作多顿饭菜。因此,如果他们正在等待土豆煮沸,而同时收到切碎沙拉的订单,他们可以继续制作沙拉,而不是无所事事地站着。您可以拥有较小的厨房(相对于餐厅的大小/顾客数量)并获得相同或更多的外出就餐次数。这是一个紧密的团队,有效地不浪费时间和资源。

Node.js 有点不同。从 JavaScript 的角度来看,它是单线程的,但磁盘和网络 IO 等其他任务是在单独的线程上自动处理的。这就像厨房里只有一名厨师,但在某些情况下这是有道理的。如果您的厨房需要那位厨师做很多繁忙的工作,那么雇用更多的厨师来工作也许是有意义的。 (要在 Node.js 中执行此操作,您只能生成更多进程,这实际上就像建造一堆彼此相邻的小厨房。您可以让一个人站在前面协调所有这些厨房的订单。) ,如果你只是一家面包店(主要只是IO,厨师的工作很少),也许你只需要一名厨师。

综上所述,使用不同的线程模型来划分工作并有效地处理它。哪种线程模型有意义取决于您的需求以及您选择的服务器的其他特征。

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

Apache 每个请求都会生成一个线程,而 Node.js 不会,这是什么意思? 的相关文章

随机推荐

  • 使用Python在OpenCV中检测MultiScale的参数

    我无法理解传递给 detectorMultiScale 的参数 我知道一般语法是 detectorMultiScale image rejectLevels levelWeights 但是 参数rejectLevels和levelWeigh
  • OpenCV 中 cv::Mat 的自定义类型

    我想使用 cv Mat 和我的自定义类型创建一个数组 这是我的代码 typedef struct int x int y float prob CellXY void main cv Mat
  • 自定义标题栏 - 系统标题栏短暂显示?

    我有一个自定义布局 我想用作我的 Android 应用程序的标题栏 找到的技术 链接在底部 有效 但系统标题栏在调用 onCreate 之前显示 显然 这看起来很不和谐 因为一会儿显示了系统标题栏 然后显示了我的自定义标题栏 styles
  • 使用 Tkinter 创建游戏板

    我正在尝试构建一个简单的游戏连接四 https en wikipedia org wiki Connect Four with Python 2 7 http www python org 我创建了一个板 它由一个简单的多维 Python
  • 当浏览器处于后台时,SSE 和 Websockets 是否可以工作?

    Both SSE 服务器发送事件 http www html5rocks com en tutorials eventsource basics and 网络套接字 http www html5rocks com en tutorials
  • 是否可以在同一页面上运行两个不同版本的ReactJS?

    大家好 我想知道是否可以在同一页面上运行两个版本的 ReactJS 类似于jQuery noConflict 经过一些研究 我发现了两件有趣的事情 两种反应不会成为朋友 虽然我很高兴大家似乎在 2015 年都开始关注 NPM 并且 NPM
  • 调整目录中图像的大小

    我有一个充满图像的目录 我想将其大小调整到原始大小的 60 左右 我该怎么做呢 可以是 Python 或 Perl Cheers Eef 如果您想以编程方式执行此操作 我认为是这种情况 请使用 PIL 来调整大小 例如 newIm im r
  • 使用 Python 填充 CSV 中的空位

    我正在解析 csv 文件来创建图表 我能够毫无问题地执行此操作 除非在单个情况下 每当 csv 文件中存在空槽时 例如 科尔1 科尔2 科尔3 科尔4 科尔545 34 23 98 1866 25 018 52 56 100 文件中的第 2
  • 如何在MinGW中使用Windows API?

    如何使用视窗应用程序接口 http en wikipedia org wiki Windows API in MinGW http en wikipedia org wiki MinGW 每当我这样做的时候 我只是 include
  • 日语和中文中 unicode 代码点的不同表示

    我正在尝试显示与 unicode 0x95E8 对应的字形 该代码点基本上是 CJK 块 中文 日语 韩语 我很难知道这个特定代码点的字形表示对于日语和中文是否可能不同 当我在 JTextArea 中显示 U 95E8 时 我能够在 lin
  • 调整横向内容 UITableviewcell 的大小

    我正在 iPhone SDK 中开发一个应用程序 我想在设备处于横向模式时调整 tableviewcell 的内容大小 在我的 tableviewcell 中 我有一个同步图像和两个标签 在纵向模式下 它看起来非常漂亮 但是当我将设备转向横
  • 如何创建工作区

    我们如何在 Visual Studio Code 中创建工作区 I see File菜单命令用于打开 添加文件夹和保存工作区 但没有用于创建工作区的命令 问题如何在 Visual Studio Code 中创建工作区 https stack
  • GCP 负载均衡器后端状态未知

    我惊呆了 我有一个暂存和生产环境 两种环境具有相同的部署 服务 入口 防火墙规则 并且都服务于200 on 但是 在打开登台环境并配置相同的入口后 登台服务失败并显示Some backend services are in UNKNOWN
  • 无法使用 pg_dump 将表复制到另一个数据库

    我正在尝试将表从一个数据库复制到另一个数据库 不是架构 我在终端中使用的代码如下 pg dump U postgres t OldSchema TableToCopy OldDatabase psql U postgres d NewDat
  • mac 找不到捆绑命令

    我正在使用 ruby 我得到了一个包含一些 ruby 程序的 zip 文件 它说 在文件夹内 运行bundle install安装所需的软件包 当我在终端中运行命令时 它说bundle command not found 有人可以给我详细说
  • 如何将字符串拆分为单词列表?

    如何拆分句子并将每个单词存储在列表中 例如 these are words these are words To split on other delimiters see Split a string by a delimiter in
  • Django - 连续发送输出

    我想开始从 django 视图处理一些文件 并且希望能够在处理文件时将文件名发送到浏览器 有没有办法 简单地 做到这一点 我可能可以使用线程和 ajax 调用来做到这一点 但我现在想要最简单的解决方案 我在一个中找到了我需要的东西answe
  • 在 SceneKit 中,bake 做了什么

    What is the purpose of bake option in SceneKit editor Does it have an impact on performance Type 提供 2 个选项 Ambient Occlus
  • Firebase实时数据库(根据UID获取其他用户信息)与REST

    我有一个使用 Firebase 实时数据库创建的应用程序 并且创建了一些用户 所有用户都使用此处找到的 REST 方法 https firebase google com docs reference rest auth https fir
  • Apache 每个请求都会生成一个线程,而 Node.js 不会,这是什么意思?

    我读过有关node js 和其他服务器 例如Apache 的信息 它们的线程是不同的 我根本不明白线程是什么意思 如果我有一个运行 SQL 来访问数据库的网页 例如一个服务器端页面中的三个不同数据库 这对于 Node js 中的线程意味着什