Node.js 的核心特点是单线程的,但它通过事件循环(Event Loop)机制来处理异步操作,使得应用程序可以同时处理多个任务。

事件循环的工作原理

  1. 任务队列(Task Queue):所有同步代码在程序开始执行时直接执行,这些代码被放入到一个叫做“执行栈”的地方。当执行栈清空后,Node.js会检查“事件队列”,如果有异步事件(如IO操作)完成,那么这些事件会从事件队列中取出,放入到“回调队列”中。

  2. 事件队列(Event Queue):当回调队列不为空时,Node.js会从队列中取出回调函数,并将其放入执行栈中执行。

  3. 轮询(Polling):Node.js会不断地检查是否有新的异步事件到达,如果有,就将其放入事件队列中。

  4. 检查(Checking):这个阶段执行的是一些执行确定不会阻塞的事件,比如定时器(setTimeout)。

  5. 关闭(Closing):当所有的事件循环阶段都完成后,Node.js会关闭当前监听的文件描述符,结束程序。

事件循环的优势

  • 非阻塞IO:Node.js在执行IO操作时不会阻塞主线程,而是将其放入事件队列,这样主线程就可以继续执行其他任务。
  • 高并发:由于Node.js的非阻塞IO特性,它能够同时处理大量并发请求。

相关链接

图片

中心位置插入一张与 Node.js 事件循环相关的图片:

Node.js 事件循环