node.js是什么?
是一个平台,将多种技术组合起来,让javascript也能调用系统接口、开发后端应用
node.js用到哪些技术
V8引擎,libuv,c/c++实现的c-ares、http-parser、OpenSSL、zlib等库
什么是 bindings
libuv是什么
可用于 TCP / UDP / DNS /文件等的异步操作
V8是什么
- 将js源代码变成本地计算机代码并执行
- 维护调用栈,确保 js 函数 的 执行顺序
- 内存管理,为所有对象分配内存
- 垃圾回收,重复利用无用的 内存
Event Loop 是什么
- 操作系统可以触发事件,js可以处理事件
- Event Loop 就是对事件处理顺序的管理
如果同时触发 三种不同事件
setTimeout(f1, 100)
fs.readFile('/1.txt', f2)
server.on('close', f3)
┌───────────────────────┐
┌─>│ timers │ (检查计时器)
│ └──────────┬────────────┘
│ ┌──────────┴────────────┐
│ │ I/O callbacks │
│ └──────────┬────────────┘
│ ┌──────────┴────────────┐
│ │ idle, prepare │
│ └──────────┬────────────┘ ┌───────────────┐
│ ┌──────────┴────────────┐ │ incoming: │ |
│ │ poll │<─────┤ connections, │ | 轮询,检查系统事件
│ └──────────┬────────────┘ │ data, etc. │ | node.js大部分在这个阶段,
│ ┌──────────┴────────────┐ └───────────────┘ (如网络,文件处理)
│ │ check │ (检查)
│ └──────────┬────────────┘
│ ┌──────────┴────────────┐
└──┤ close callbacks │
└───────────────────────┘
总结: Node.js是
- 用libuv进行异步 I/O操作
- 用 event loop 管理事件处理顺序
- C/C++库高效处理 DNS/HTTP ..
- Bindings让js和c/c++ 沟通
- 用 V8运行 js
- 用 node.js 标准库简化 js 代码