Nodejs事件循环机制

Node.js 在主线程里维护了一个事件队列,当接到请求后,就将该请求作为一个事件放入这个队列中,然后继续接收其他请求。当主线程空闲时(没有请求接入时),就开始循环事件队列,检查队列中是否有要处理的事件,这时要分两种情况:如果是非 I/O 任务,就亲自处理,并通过回调函数返回到上层调用;如果是 I/O 任务,就从 线程池 中拿出一个线程来处理这个事件,并指定回调函数,然后继续循环队列中的其他事件。
当线程中的 I/O 任务完成以后,就执行指定的回调函数,并把这个完成的事件放到事件队列的尾部,等待事件循环,当主线程再次循环到该事件时,就直接处理并返回给上层调用。 这个过程就叫 事件循环 (Event Loop),其运行原理如下图所示:

这个图是整个 Node.js 的运行原理,从左到右,从上到下,Node.js 被分为了四层,分别是应用层、V8引擎层、Node API层 和 LIBUV层。
应用层:即 JavaScript 交互层,常见的就是 Node.js 的模块,比如 http,fs。
V8引擎层:即利用 V8 引擎来解析JavaScript 语法,进而和下层 API 交互。
NodeAPI层:为上层模块提供系统调用,一般是由 C 语言来实现,和操作系统进行交互。
LIBUV层:是跨平台的底层封装,实现了 事件循环、文件操作等,是 Node.js 实现异步的核心 。

posted @ 2020-04-23 09:04  乡乡  阅读(343)  评论(0编辑  收藏  举报