📜  解释 Node.js 的工作原理

📅  最后修改于: 2022-05-13 01:56:25.668000             🧑  作者: Mango

解释 Node.js 的工作原理

Node.js 是一个开源的后端 javascript 运行时环境。它用作后端服务,其中 javascript 在应用程序的服务器端工作。这种方式 javascript 用于前端和后端。 Node.js 在 chrome v8 引擎上运行,该引擎将 javascript 代码转换为机器代码,它具有高度可扩展性、轻量级、快速和数据密集型。

Node.js 的工作: Node.js 接受来自客户端的请求并发送响应,而使用请求 node.js 使用单个线程处理它们。要操作 I/O 操作或请求 node.js 使用线程的概念。线程是服务器需要执行的一系列指令。它在服务器上并行运行以向多个客户端提供信息。 Node.js 是一种事件循环单线程语言。它可以使用单个线程处理并发请求,而不会因一个请求而阻塞它。

Node.js 基本上适用于两个概念

  • 异步
  • 非阻塞 I/O

非阻塞 I/O:非阻塞 I/O 意味着处理多个请求而不阻塞单个请求的线程。 I/O 基本上与文件、数据库等外部系统进行交互。 Node.js 不用于 CPU 密集型工作,用于计算、视频处理,因为单个线程无法处理 CPU 工作。

异步:异步正在执行一个回调函数。当我们从其他服务器或数据库获得响应时,它将执行一个回调函数。一旦完成某些工作,就会调用回调函数,这是因为 node.js 使用事件驱动的架构。单线程不处理请求,而是将请求发送到另一个系统,该系统解析请求,并且可以访问另一个请求。

为了实现系统处理请求的概念,node.js 使用了 Libuv 的概念。

Libuv 是一个内置 C 的开源库。它非常关注异步和 I/O,这使节点可以访问底层计算机操作系统、文件系统和网络。

Libuv 实现了 node.js 的两个极其重要的特性

  • 事件循环
  • 线程池

事件循环:事件循环包含一个线程,负责处理简单的任务,例如执行回调和网络 I/O。当程序要初始化所有顶层代码时执行,代码不在回调函数中。回调函数中的所有应用程序代码都将在事件循环中运行。 EventLoop 是 node.js 的核心。当我们启动节点应用程序时,事件循环立即开始运行。大部分工作都是在事件循环中完成的。

Nodejs 使用事件驱动架构。

  • 发出事件。
  • 事件循环将它们拾起。
  • 回调被调用。

事件队列:一旦发送请求,线程就会将请求放入队列中。它被称为事件队列。应用程序接收 HTTP 请求或服务器或计时器等过程将在完成工作后立即发出事件,事件循环将拾取这些事件并调用与每个事件关联的回调函数并将响应发送到客户端.

事件循环是一个无限循环,不断接收请求并处理它们。它检查队列并无限期地等待传入的请求。

线程池:虽然 node.js 是单线程的,但它在内部维护了一个线程池。当接受非阻塞请求时,会在事件循环中处理,但在接受阻塞请求时,它会检查线程池中的可用线程,为客户端的请求分配一个线程,然后处理该请求并将其发送回事件循环,并且响应被发送到相应的客户端。

线程池大小可以更改:

进程.env.UV_THREADPOOL_SIZE = 1;

Node.js 的工作