Node.js 工作原理

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工作。

异步: 异步是执行回调函数。一旦从其他服务器或数据库获得响应,它将执行回调函数。回调函数在某些工作完成后立即调用,这是因为Node.js使用事件驱动的架构。单个线程不与请求一起工作,而是将请求发送到另一个解析请求的系统,对另一个请求是可访问的。

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

Libuv是内置的C开源库。它强调异步和I/O,这使得Node能够访问底层计算机操作系统、文件系统和网络。

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

  • 事件循环
  • 线程池

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

Node.js使用事件驱动架构。

  • 事件被触发。
  • 事件循环捕获事件。
  • 回调函数被调用。

事件队列: 一旦发送请求,线程将请求放入队列中。这被称为事件队列。例如,应用收到HTTP请求或服务器或计时器完成工作后,它们会立即发送事件,事件循环会捕获这些事件并调用与每个事件相关联的回调函数,然后将响应发送给客户端。

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

线程池: 尽管Node.js是单线程的,但它在内部维护着一个线程池。当接受非阻塞请求时,它们在事件循环中处理,但是在接受阻塞请求时,它会检查线程池中是否有可用线程,将一个线程分配给客户端请求,然后将其处理并发送回事件循环,并将响应发送给相应的客户端。

线程池的大小可以更改:

process.env.UV_THREADPOOL_SIZE = 1;

Node.js 工作原理

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程