📜  NodeJS 中的非阻塞事件循环(1)

📅  最后修改于: 2023-12-03 14:44:44.277000             🧑  作者: Mango

NodeJS 中的非阻塞事件循环

NodeJS 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它采用了事件驱动的非阻塞 I/O 模型,使得在处理高并发、大数据量、高 I/O 的场景下表现更加出色。

什么是事件循环

事件循环(Event Loop)是 NodeJS 中的一个核心概念,其本质是一个循环结构,用于监听事件并执行回调。事件循环会不断地监听事件队列中是否存在事件,如果存在,则取出第一个事件,并执行该事件对应的回调函数,然后再次检查事件队列。

非阻塞和异步

NodeJS 的非阻塞和异步并不是相同的概念,但它们是密切相关的。

非阻塞是指 I/O 操作执行期间,线程不会停止等待 I/O 操作的结果,而是会继续执行下一条语句。

异步是指 I/O 操作不会阻塞后续代码的执行,而是采用回调函数的形式,等到 I/O 操作完成后再调用回调函数。

NodeJS 的非阻塞事件循环模型

NodeJS 的非阻塞事件循环模型主要由以下几个部分组成:

  1. NodeJS 运行环境开启时会创建一个事件循环线程(主线程),用于监听事件队列中是否存在事件。
  2. I/O 操作完成后,内核会给事件循环线程发送一个事件,表示该操作已完成。事件循环线程接收到这个事件之后,将其放入事件队列。
  3. 当事件循环线程开始监听事件队列时,它会取出队列中的第一个事件,并执行该事件对应的回调函数。
  4. 执行完该回调函数之后,事件循环线程会再次检查事件队列,重复步骤 3。

下面是一个示意图:

NodeJS 非阻塞事件循环模型

总结

NodeJS 的非阻塞事件循环模型是其高效处理大量 I/O 操作的关键所在。了解 NodeJS 事件循环的原理,对于编写高效的 NodeJS 程序非常重要。