Node.js技术架构

Node.js是是什么?是一个平台,他将多种技术组合起来,让JavaScript也能调用系统接口、开发后端应用。

Node.js用到了哪些技术?v8引擎,libuv,C/C++实现的相关库。 

Node.js技术架构

 

bindings

背景:

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

  • Node.js用C++对http_parser进行封装,使它符合某些要求,封装的文件叫做http_parser_bindings.cpp
  • 用Node.js提供的编译工具将其编译为.node文件
  • JS代码可以直接require这个.node文件
  • 这样JS就能调用C++库,中间的桥梁就是binding
  • 由于Node.js提供了很多binding,所以加个s,这就是bindings

 

V8引擎

Node.js工作流

Node.js技术架构

功能:

  • 将JS源代码变成机器代码执行
  • 维护调用栈,确保JS函数的执行顺序
  • 内存管理,为所有对象分配内存
  • 垃圾回收,重复利用无用的内存
  • 实现JS的标准库

注意:

  • V8不提供DOM API
  • V8执行JS是单线程的
  • 可以开启两个线程分别执行JS
  • V8本身是包含多个线程的,入垃圾回收为单独线程
  • 自带event loop 但Node.js基于libuv自己做了一个

libuv

背景:

  • FreeBSD系统上有kqueue
  • Linux系统上有epoll
  • Windows系统上有IOCP
  • Ryan为了一个跨平台的异步I/0库,开始写libuv
  • libuv会根据系统自动选择合适的方案

功能:

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

Node.js常用API

 

总结

  • 用libuv进行异步I/O操作
  • 用event loop 管理事件处理顺序
  • 用C/C++ 库高效处理DNS/HTTP...
  • 同bindings让JS能和C/C++沟通
  • 用V8运行JS
  • 用Node.js标准库简化JS代码
  • 这就是Node.js