node.js是什么
- 是一个平台
- 他将多种技术组合起来
- 让JavaScript也能调用系统接口,开发后端应用
- Node.js用到了哪些技术
- V8引擎
- libuv
- C/C++实现的c-ares、http-parser、OpenSSl、zlip等库
node.js的技术架构
1.Node.js bindings
- 背景
- C/C++实现了一个http_parser库,很高效
- 你只会写JS,但是你想调用这个库
- 直接调用不能成功,需要一个中间的桥梁
- bindings
2.libuv是什么
-
背景
- FreeBSD系统上有kqueue
- linux系统上有epoll
- Windows系统上有IOCP
- Ryan为了一个跨平台的异步I/O库,开始写libuv
- 所有的输入输出都属于I/O
- libuv会根据系统自动选择合适的方案
-
功能
- 可以用TCP/UDP/DNS/文件等的异步操作
V8是什么
Event Loop 是什么
- 操作系统可以触发事件,js处理事件
- EventLoop就是对事件处理顺序的管理
什么是Event
- 计时器到期了(内部的)
- 文件可以读取了、读取出错了(外部的)
- socket有内容了、关闭了(外部的)
操作系统生成事件告诉js
什么是Loop (循环)
- Loop就是循环
- 由于事件是分优先级的,所以处理起来也是分先后的
- 所以node.js需要按顺序轮询每种事件
- 这种轮询往往都是循环的,1-> 2-> 3->1->2->3
EventLoop顺序示意图
-
重点阶段
- timers检查计时器
- poll轮询,检查系统时间
- check检车setImmediate回调
- 其他阶段用的较少
-
注意
- 大部分时间,node.js都停在poll轮询阶段
- 大部分事件都在poll简短被处理,如文件,网络请求等