📜  单线程非阻塞 IO 模型如何在 NodeJS 中工作?

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

单线程非阻塞 IO 模型如何在 NodeJS 中工作?

Node.js是一个运行在 Chrome V8 引擎上的 JavaScript 运行时环境,用于服务器端脚本。它接收来自用户的请求,处理这些请求,并将响应返回给相应的用户。

一些重要的 Node.js 特性是:

  • 它基于单线程架构:由于 node.js 从多个用户获取多个请求,它一次执行一个命令。因此,它可以非常有效地处理并发客户端请求并具有良好的性能。
  • 它使用事件驱动的基于非阻塞的 IO 模型:无论何时启动节点服务器,它都会启动某些变量和函数,然后等待事件发生,每当检测到事件时,就会为该特定事件分配一个回调函数。事件驱动架构使服务器具有高度可扩展性,它不等待 API 返回数据,而是立即移动到下一个 API 以等待下一个请求。非阻塞操作意味着服务器不会为一个请求阻塞自己。非阻塞调用仅发起操作,稍后提供响应,同时可以继续其他客户端请求。

示例:如果我们收到来自两个用户 A 和 B 的请求。使用非阻塞 IO,我们可以向 A 发起请求,然后立即向 B 发起请求,而无需等待对 A 的请求的响应。因此我们可以说借助 non -blocking IO 我们可以消除多线程的使用,因为节点服务器可以同时处理多个请求。

单线程非阻塞IO的工作:

  • 当客户端向服务器发送请求时,该请求称为事件。这些所有请求都存储在事件队列中。事件循环中存在的单个线程将此请求分配给内部线程池中存在的线程之一。
  • 该线程读取客户端请求,处理请求,在需要时执行任何阻塞 IO 操作,并准备最终响应以发送回服务器。事件循环将此响应发送回相应的客户端。
  • 事件循环无限接收请求并处理它们。
  • 由于事件循环,不需要多个线程。由于这个事件循环和单线程概念,node.js 使用更少的资源和内存。

参考: https://www.geeksforgeeks.org/introduction-to-nodejs/