Node.js
February 17, 2023
Concepts1 #
-
JS 引擎
解析和执行 JS 代码,如 v8
-
JS 运行时
JS 运行时可以理解为 JS 本身 + 一些拓展的能力所组成的一个运行环境
-
Libuv
跨平台的异步 IO 库
它主要是封装各个操作系统的一些 API,提供网络还有文件进程这些功能
Node 架构 #
单线程 + 事件驱动 + 非阻塞 IO
如下图
-
事件驱动
事件驱动是操作系统提供的订阅发布机制,由操作系统的 IO 多路复用模块实现,不同的操作系统中提供的 API 不一样,比如 Linux 的 epoll、MacOs 的 kqueue、windows 的 IOCP
当 Node.js 中没有任务处理时,它就会阻塞在这里,有事件发生后,就会被唤醒继续执行
Event Loop #
Node.js 的任务分为宏任务和微任务,宏任务包括定时器、网络 IO、文件 IO,微任务包括 Promise、process.nextTick。另外,任务还有优先级的属性。具体来说,微任务比宏任务优先级高,每次执行完一个宏任务,就会处理所有的微任务,再执行下一个宏任务
Node.js 虽然是跑在多线程上面的,但是所有的 JS 代码都是跑在单个线程里的
处理过程