Node.js 技术架构
目录
- JS 如何调用 C++
- libuv & v8 功能
- EventLoop 简单介绍
- Node.js 技术架构总结
- Node.js API 与学习方法
文件模块
Node.js 不是什么
不是 web 框架
Node.js 并不是 web 后端框架
所以你不能把 Node.js与 Flask或 Spring 对比
不是编程语言语言
Node.is 并不是后端的 JS
所以你不能把 Node.is与 Python 或 PHP 对比
Node.js 是什么
是一个平台
它将多种技术组合起来
让 JavaScript 也能调用系统接口、开发后端应用
Node.is 用到了哪些技术
V8 引擎
libuv
C/C++ 实现的 c-ares、OpenSSL、zlibhttp-parser、等库
Node.js 技术架构
Node.is API
http 模块、fs 模块、、steam 模块等
Node.js bindings让 JS 和 C/C++ 通信
JS 引擎V8
跨平台的异步I/0能力
libuv DNS 解析c-ares C/C++ 插件自定义其他能力 加密解密OpensSl 其他... http_parser、zlib等
可以看的书:https://github.com/yjhjstz/deep-into-node
libuv 是什么
背景
FreeBSD 系统上有 kqueue
Linux 系统上有 epoll
Windows 系统上有IOCP
Ryan 为了一个跨平台的异步 I/O 库,开始写 libuv
libuv 会根据系统自动选择合适的方案
功能
可以用于 TCP/UDP/DNS/文件等的异步操作
V8 是什么
功能
将JS源代码变成本地代码并执行
维护调用栈,确保 JS 函数的执行顺序
内存管理,为所有对象分配内存
垃圾回收,重复利用无用的内存
实现 JS 的标准库
注意
V8 不提供 DOM API V8 执行 JS 是单线程的
可以开启两个线程分别执行 JS
V8 本身是包含多个线程的,如垃圾回收为单独线程
自带 event loop 但 Node.is 基于 libuv 自己做了一个
Event Loop 是什么
什么是 Event
计时器到期了
读取出错了文件可以读取了
socket 有内容了、关闭了
什么是 Looploop
就是循环,比如 while(true) 循环
由于事件是分优先级的,所以处理起来也是分先后的
所以 Node.is 需要按顺序轮询每种事件
这种轮询往往都是循环的,1->2->3->1->2->3
Event Loop
操作系统可以触发事件,JS可以处理事件
Event Loop 就是对事件处理顺序的管理
Event Loop
顺序示意图
┌───────────────────────┐
┌─>│ timers │
│ └──────────┬────────────┘
│ ┌──────────┴────────────┐
│ │ I/O callbacks │
│ └──────────┬────────────┘
│ ┌──────────┴────────────┐
│ │ idle, prepare │
│ └──────────┬────────────┘ ┌───────────────┐
│ ┌──────────┴────────────┐ │ incoming: │
│ │ poll │<─────┤ connections, │
│ └──────────┬────────────┘ │ data, etc. │
│ ┌──────────┴────────────┐ └───────────────┘
│ │ check │
│ └──────────┬────────────┘
│ ┌──────────┴────────────┐
└──┤ close callbacks │
└───────────────────────┘
重点阶段
timers 检查计时器 poll轮询,检查系统事件
check 检查 setlmmediate 回调
其他阶段用得较少
注意
大部分时间,Node.is 都停在 poll轮询阶段
大部分事件都在 poll阶段被处理,如文件、网络请求
https://juejin.cn/post/6844903582538399752
总结
用 libuv 进行异步 I/O 操作
用 event loop 管理事件处理顺序
用 C/C++库高效处理 DNS/HTTP...
用 bindings 让 JS 能和 C/C++ 沟通
用 V8 运行 JS
用 Node.is 官方库简化 JS 代码
- http 模块、fs 模块、steam 模块等
这就是 Node.js
Node.js 工作流程
