nodejs http/s 模块是否使用工作线程来监听请求?

2024-04-05

与一位同事进行了一些交谈,它陷入了线程的兔子洞,我想知道像expressjs这样使用https模块内置的nodejs的东西是否使用workers来监听每个网络请求或其他设计的连接。

有人知道http类型请求通常如何等待连接吗?线程?工人?


nodejs http/s 模块是否使用工作线程来监听请求?

不,不是的。 Nodejs 是一个事件驱动的系统。只要有可能,它就会使用操作系统中的底层异步功能,这就是它对所有 TCP/UDP 网络(包括 http)所做的事情。

因此,它使用操作系统中的本机异步功能。当某些网络事件发生时(例如传入连接或传入数据包),操作系统将通知nodejs并将事件插入事件队列。当nodejs没有做其他事情时,它会返回到事件队列并从事件队列中拉出下一个事件并运行与该事件关联的代码。

这一切都是由 libuv 库为 Nodejs 管理的,该库提供了 Nodejs 运行的操作系统兼容层(在多个不同的平台上)。网络是 libuv 提供的一部分。

这并不涉及为每个 TCP 套接字设置一个单独的线程。 libuv 本身使用一些系统线程来完成其工作,但它不会为您连接的每个 TCP 套接字创建一个新线程,并且需要注意的是,它使用操作系统中的本机异步网络接口(而不是阻塞接口)。

libuv 项目是here https://libuv.org/(包括来源)如果您想了解有关该特定库的更多信息。

libuv 确实使用线程池来执行某些在操作系统中没有一致、可靠的异步接口的操作(例如文件系统访问),但该线程池不用于或不需要用于网络。

网络上还有无数关于 NodeJS 事件循环各个方面如何工作的文章,其中包括 NodeJS 文档本身中的一些文章。

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

nodejs http/s 模块是否使用工作线程来监听请求? 的相关文章

  • 如何在 React 中使用原生 Node.js 插件

    我有一个反应项目 我想在其中使用this https github com svenpaulsen node ts3sdk client原生 Node js 插件 它是 C SDK 的包装器 我过去曾在 Electron 项目中成功使用过此
  • 线程与并行处理

    Microsoft NET 4 0 为其框架引入了新的 并行增强功能 我想知道使用标准 System Threading 函数与新的并行增强功能创建应用程序之间有什么区别 并行扩展和常规线程之间最重要的区别可能是控制流 一个线程 使用创建n
  • 在 GCP PubSub 中收到任何响应之前重试总超时时间已超过

    我正在尝试使用 Node js 推送到 PubSub 主题 google cloud pubsub模块 这是 JavaScript 代码 const pubsub require google cloud pubsub class MyPu
  • 将对象数组作为请求中的 url 参数传递

    我需要将一个对象数组 每个对象有 2 个字段 作为 http 请求的 url 中的参数 我该怎么做以及这个链接应该是什么样子 您可以使用您的结构创建一个 xml 即一个对象数组 每个对象都有两个字段 然后将其转换为字符串 如下所示 举个例子
  • Python中的键盘可中断阻塞队列

    It seems import Queue Queue Queue get timeout 10 键盘可中断 ctrl c 而 import Queue Queue Queue get 不是 我总是可以创建一个循环 import Queue
  • AzureAD JWT 令牌受众声明前缀使 JWT 令牌无效

    我正在使用 adal node npm 包通过 AzureAD 进行身份验证 一切正常 我得到了一个令牌 但是 在检查 JWT 令牌中的 aud 声明时 我看到受众 GUID 的前缀为 spn 我认为当我尝试在现有的 Web API 上使用
  • android 如何延迟执行

    我正在构建一款具有人工智能功能的安卓棋盘游戏 AI 轮流执行 必须调用一系列操作 然后将无效信息发布到我的自定义视图中进行更新 我需要放慢这些动作的速度 以便用户能够看到人工智能正在轮到它 而不是它一闪而过 我已经尝试过一些类似的事情 tr
  • Express.js req.ip 正在返回 ::ffff:127.0.0.1

    我目前正在尝试获取所请求用户的IP 问题是IP正在返回 ffff 127 0 0 1代替127 0 0 1 我尝试使用trusted proxy选项 尽管不使用代理 和req ips是空白的 使用 4 x Express js router
  • mean.io - 错误:“请求实体太大”。如何在meanio模块之外增加bodyParser限制?

    我在mean io 应用程序中收到以下错误 Error request entity too large 为了解决这个问题 我在以下位置增加了meanio模块中的bodyParser限制 node modules meanio lib co
  • 使用相同的 SqlConnection 对 SqlCommand.BeginExecuteNonQuery 进行多个并发调用

    我有一些可用的 C 代码 它使用 SqlConnection 创建临时表 例如 Foo 调用存储过程来填充这些临时表并将结果返回到 C 客户端 使用 C 对这些结果执行复杂的计算 并使用计算结果更新之前创建的临时表之一 由于整个过程中都会使
  • 使用node和multer将图像上传到heroku不起作用

    我正在尝试使用 Node 后端将图像文件上传到 Heroku 我可以使其工作 同样的过程在本地主机测试中工作得很好 但是在将我的项目部署到 Heroku 并测试它之后 过程和文件中出现错误不会上传 后端 let storage multer
  • Promise 完成后导出模块

    我实际上想将 read 函数放在不同的模块中 然后在我的主 app js 中需要它 我对使用承诺还很陌生 修改 var dir require node dir var files function getFiles return new
  • RxJS Angular2 在 Observable.forkjoin 中处理 404

    我目前正在链接一堆 http 请求 但是在订阅之前我无法处理 404 错误 My code 在模板中 service getData subscribe data gt this items data err gt console log
  • 使用 Mongoose 多次查询,无需嵌套

    我正在尝试使用 node js 生成一个文档 该文档需要从 mongo 数据库运行多个不相关的数据库查询 这是我当前的代码 Data find function err results if err return next err fini
  • 线程终止时的 Java ExecutorService 回调

    我正在使用缓存线程池 ExecutorService 来运行一些异步后台任务 我提供了 ThreadFactory 它将线程分发给 ExecutorService 只要需要它们 我对缓存线程池的理解是 线程空闲 60 秒后 它会被 Exec
  • 带有引用数组的 Mongoose 模型架构:CastError:值“[object Object]”转换为 ObjectId 失败

    我用express js 和mongoosejs 构建了一个博客网站 一篇文章可能有一个或多个类别 当我创建新文章时 出现错误 CastError Cast to ObjectId failed for value object Objec
  • 使用单个共享后台线程进行 iOS 数据处理?

    我有一个应用程序 可以从网络下载大量资源 并对每个资源进行一些处理 我不希望这项工作发生在主线程上 但它非常轻量级且优先级低 因此所有这些都可以真正发生在同一个共享工作线程上 这似乎是一件好事 因为设置和拆除所有这些工作线程都需要工作 没有
  • “访问此资源所需的证书无效”

    XMLHttpRequest Network Error 0x800c0019 Security certificate required to access this resource is invalid 我已经找到解决方案了 首先 我
  • 为多线程 UDP 客户端执行“close ()”时套接字描述符未释放

    我在下面编写了 UDP 客户端 它基本上生成一个单独的线程来接收数据报 但是数据报仅在主线程中发送 现在 在 Linux 发行版上实例化 udpClient 1 UDP 客户端后按 ctrl D 实现退出循环 围绕 getline 调用 并
  • 如何让我的方法等待所有线程完成?

    我有一个方法可以触发线程来完成一些工作 将有 2 个线程异步运行一段时间 当调用它们的回调方法时 回调会触发另一个线程 直到所有工作完成 如何让我的方法等待所有这些线程完成并被触发 如果这是 Net 4 0 您可以使用CountdownEv

随机推荐

  • 在 Swift 中仅更改 AttributedText 的字体

    我在 IB 中创建了许多 UILabel 它们都有属性文本 每个标签的文本包含多行不同字体大小和颜色 在运行时 我希望能够仅更改这些标签的字体名称 而不更改现有的字体大小或颜色 我进行了研究 但找不到直接的方法来实现这一目标 有任何想法吗
  • 在现有 Firebase 项目目录中初始化 firebase CLI 功能

    我正在尝试将 托管 功能添加到已安装 Functions 的 Firebase 项目文件中 所以我想知道我是否可以使用 Firebase Init 来做到这一点 否则这将删除我现有的 firebase 功能 无论如何 我可以在不删除 Fir
  • Parallel.ForEach 和 DataTable - DataTable.NewRow() 不是线程安全的“读取”操作吗?

    我正在转换现有的应用程序以利用多个处理器 我有一些嵌套循环 并且我已将最内层循环转换为 Parallel Foreach 循环 在原始应用程序中 在最内层循环内 代码将调用DataTable NewRow 要实例化适当布局的新 DataRo
  • php oop 使用 ajax 登录失败

    我已经使用 php oops 和 ajax 作为登录按钮完成了登录页面 if isset result username 它以 Json 类型返回错误的详细信息 if isset result username 其返回成功的 Json 类型
  • 如何在 AuthenticationSuccessHandler 中检索会话范围的 bean?

    我有一个自定义的 AuthenticationSuccessHandler 我想要做的是在 onAuthenticationSuccess 方法中设置一些会话数据 为了存储会话数据 我想使用会话范围的 bean 它在任何控制器中都可以正常工
  • nginx + php5-fpm 中的错误 502

    我的主题有一些错误 服务器负载不高 CPU约15 内存有几GB 硬盘不忙 但错误 502 大约在 3 的情况下抛出 程序 Debian 6 nginx 0 7 62 php5 fpm 5 3 3 1 在nginx的error log中是这样
  • QThread.wait()函数有什么用?

    我和其他人一样偶然发现了这个问题 QThread 不会停止 不处理信号 https stackoverflow com questions 7432861 qthread wont stop does not process a signa
  • C 语言的完整 x86/x64 JIT 汇编器

    你知道类似的事情吗this http code google com p asmjit 但是可以嵌入到 C 程序中吗 一些选项 LibJIT http www gnu org software dotgnu GNU闪电 http www g
  • 使用maven为eclipse编译器设置Java 6注释处理配置

    为 Java 6 注释处理器设置 eclipse 项目编译器配置的最佳方法是什么 我的解决方案是设置org eclipse jdt apt core prefs and factorypath手动文件 这有点麻烦 在工厂路径文件中引用处理器
  • 最大函数c树高度

    c 中是否有 max 函数 所以我可以做这样的事情来计算树高 或者也许有更好的方法来计算树高 int height struct node tree if tree NULL return 0 return 1 max height tre
  • 如何在不使用 Management Studio 的情况下更改 SQL Server 授权模式

    有没有办法在不使用 SQL Server Management Studio 的情况下更改 SQL Server 2008 或 2012 中的授权模式 以下是 Management Studio 将身份验证模式从混合更改为仅 Windows
  • 如何在仅限订单的先决条件中调用函数?

    鉴于 Makefile 的这一点 for pattern matching OBJDIR build just to see if a level of indirection will work my dir dir 1 OBJECTS
  • 如何使用 Python webbrowser 包关闭现有浏览器选项卡

    使用 Python webbrowser 包我可以打开一个具有指定 URL 的新选项卡 有没有办法关闭这个选项卡 我参考了下面的官方文档 但没有提到任何与密切行动相关的内容 Python webbrowser 包文档 https docs
  • REST 服务的 Codeigniter 身份验证密钥

    我正在使用 Phil Sturgeon Rest Server 编写一个简单的 RESTful 服务 我想通过使用此库提供的 API 密钥来保护我的方法 不幸的是 这没有很好的记录 我有点迷失了 我想对用户进行身份验证 电子邮件 密码 然后
  • Scala - 迭代器和 takeWhile

    我正在运行以下代码 val it List 1 1 1 2 2 3 3 iterator buffered val compare it head it takeWhile compare toList 它返回 1 1 1 但是 如果我将其
  • dart:ui:1: 错误:未找到:dart:ui。颤动/飞镖:

    当我启动调试会话 按 F5 时 我收到以下消息 dart ui 1 Error Not found dart ui Exited sigterm 没有迹象表明问题发生在哪里 输出来自扑动医生 v is Flutter Channel bet
  • C++11:防止 lambda 范围捕获错误

    在 C 中 与 C 等语言相反 可以指定是否应通过 lambda 表达式中的值或引用来捕获封闭范围变量 这会导致未定义的情况 在这种情况下 可以传递一个带有封闭范围的 lambda 该封闭范围是通过引用在调用 lambda 表达式之前返回的
  • Swift 中如何获取值类型的引用?

    诸如 struct 和 enum 之类的值类型是按值复制的 是否可以获取值类型变量的引用 struct Test let t Test let s t How to get a reference to t instead of a cop
  • Jupyter Notebook 中的 Google Colab eval_js?

    有什么方法可以得到的行为google colab output eval js在 Jupyter 笔记本中 我有一些使用的代码IPython display让用户绘制图像 当按下按钮时 JS 将图像内容保存为data然后我用data eva
  • nodejs http/s 模块是否使用工作线程来监听请求?

    与一位同事进行了一些交谈 它陷入了线程的兔子洞 我想知道像expressjs这样使用https模块内置的nodejs的东西是否使用workers来监听每个网络请求或其他设计的连接 有人知道http类型请求通常如何等待连接吗 线程 工人 no