Node.js是什么
- Node.js是一个平台
- 他将多种技术组合起来
- 让JavaScript也能调用系统接口、开发后端应用
Node.js用到了哪些技术
- V8引擎
- libuv
- C/C++实现的c-ares、http-parser、OpenSSL、zlib等库
Node.js技术架构
bindings
Node.js用C++对http_parser金行封装,使它符合某些要求,封装的文件叫做http_parser_bindings.cpp
用Node.js提供的编译工具将其编译为.node文件
JS代码可以直接require这个.node文件
这样JS就能调用C++库,中间的桥梁就是binding
由于Node.js提供了很多binding,所以加个s
// 这就是bindings
libuv
FreeBSD系统上有kqueue
Linux系统上有epoll
Windows系统上有IOCP
Ryan为了一个跨平台的伊步I/O库,开始写libuv
libuv会根据系统自动选择合适的方案
// libuv功能
可以用于TCP/UDP/DNS/文件 等的异步操作
V8
将JS源代码变成本地代码并执行
维护调用栈,确保JS函数的执行顺序
内存管理,为所有对象分配内存
垃圾回收,重复利用无用的内存
实现JS的标准库
// 其他
V8不提供DOM API
V8执行JS是单线程的
可以开启两个线程分别执行JS
V8本身是包含多个线程的,如垃圾回收为单独线程
自带event loop 但Node.js基于 libuv 自己做了一个
Event Loop
操作系统可以触发时间,JS可以处理事件
Event Loop就是对事件处理顺序的管理