Node.js了解
作者:互联网
Node.js了解
介绍
- Node.js不是WEB框架
- Node.js不是WEB后端框架,不要将它与Flask或者Spring对比
- Node.js不是后端的JS
- 不要把Node.js与Python或者PHP对比
- 是一个平台
- 将多种技术组合
- 让JS能调用系统接口,开发后端应用
- 具体应用技术
- V8引擎
- libuv
- C/C++实现的c-ares、http-parser、openssl、zlib
Node.js技术架构
图示
bindings
- C/C++实现了http_parser库,高效
- 由于JS不能直接调用,需要一个桥梁,bindings可以充当这个桥梁
- Node.js用C++对http_parser进行封装,使它符合某些要求,封装的文件叫做http_parser_bindings.cpp
- 用Node.js进行编译转换为.node文件*
- JS代码可直接require .node文件
- JS调用C++库,中间的桥梁就是bindings
- 由于Node.js提供了很多binding,所以就是bindings
Node.js工作流程
图示
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.js基于libuv开发了一个
Event Loop
Event
- 计时器功能
- 文件读取、读取出错
- socket通信,有内容,关闭了
Loop
- 循环
- 事件有优先级,处理因此也分先后
- Node.js需按顺序轮询每种事件
- 轮询是循环的
Event Loop
- 操作系统可以触发事件,JS可以处理事件
- Event Loop就是对事件处理顺序的管理
图示
图示重点阶段
- timers检查计时器
- poll轮询,检查系统事件
- check检查setImmediate回调
- 其他阶段用的少
重点关注
- 很多时候,Node.js都停留在poll轮询阶段
- 大部分事件都在poll阶段被处理,如文件、网络请求
Node API文档
Node.js总结
- 用libuv进行异步I/O操作
- 用event loop管理事件处理顺序
- 用C/C++库高效处理DNS/HTTP…
- 用bindings让JS能和C/C++沟通
- 用V8运行JS
- 用Node.js标准库简化JS代码
标签:Node,图示,C++,JS,了解,bindings,js 来源: https://blog.csdn.net/xiaobangsky/article/details/111780031