Node.js技术架构

91 阅读1分钟

node.js是什么

  • 是一个平台
    • 他将多种技术组合起来
    • 让JavaScript也能调用系统接口,开发后端应用
  • Node.js用到了哪些技术
    • V8引擎
    • libuv
    • C/C++实现的c-ares、http-parser、OpenSSl、zlip等库

node.js的技术架构

image.png

1.Node.js bindings

  • 背景
    • C/C++实现了一个http_parser库,很高效
    • 你只会写JS,但是你想调用这个库
    • 直接调用不能成功,需要一个中间的桥梁
  • bindings

image.png

2.libuv是什么

  • 背景

    • FreeBSD系统上有kqueue
    • linux系统上有epoll
    • Windows系统上有IOCP
    • Ryan为了一个跨平台的异步I/O库,开始写libuv
    • 所有的输入输出都属于I/O
    • libuv会根据系统自动选择合适的方案
  • 功能

    • 可以用TCP/UDP/DNS/文件等的异步操作

V8是什么

image.png

Event Loop 是什么

  1. 操作系统可以触发事件,js处理事件
  2. EventLoop就是对事件处理顺序的管理

什么是Event

  1. 计时器到期了(内部的)
  2. 文件可以读取了、读取出错了(外部的)
  3. socket有内容了、关闭了(外部的)

操作系统生成事件告诉js

什么是Loop (循环)

  • Loop就是循环
  • 由于事件是分优先级的,所以处理起来也是分先后的
  • 所以node.js需要按顺序轮询每种事件
  • 这种轮询往往都是循环的,1-> 2-> 3->1->2->3

EventLoop顺序示意图

image.png

  • 重点阶段

    • timers检查计时器
    • poll轮询,检查系统时间
    • check检车setImmediate回调
    • 其他阶段用的较少
  • 注意

    • 大部分时间,node.js都停在poll轮询阶段
    • 大部分事件都在poll简短被处理,如文件,网络请求等