Node.js 的核心特点是单线程的,但它通过事件循环(Event Loop)机制来处理异步操作,使得应用程序可以同时处理多个任务。
事件循环的工作原理
任务队列(Task Queue):所有同步代码在程序开始执行时直接执行,这些代码被放入到一个叫做“执行栈”的地方。当执行栈清空后,Node.js会检查“事件队列”,如果有异步事件(如IO操作)完成,那么这些事件会从事件队列中取出,放入到“回调队列”中。
事件队列(Event Queue):当回调队列不为空时,Node.js会从队列中取出回调函数,并将其放入执行栈中执行。
轮询(Polling):Node.js会不断地检查是否有新的异步事件到达,如果有,就将其放入事件队列中。
检查(Checking):这个阶段执行的是一些执行确定不会阻塞的事件,比如定时器(setTimeout)。
关闭(Closing):当所有的事件循环阶段都完成后,Node.js会关闭当前监听的文件描述符,结束程序。
事件循环的优势
- 非阻塞IO:Node.js在执行IO操作时不会阻塞主线程,而是将其放入事件队列,这样主线程就可以继续执行其他任务。
- 高并发:由于Node.js的非阻塞IO特性,它能够同时处理大量并发请求。
相关链接
图片
中心位置插入一张与 Node.js 事件循环相关的图片: