node.js是什么?

159 阅读1分钟

node.js是什么?

是一个平台,将多种技术组合起来,让javascript也能调用系统接口、开发后端应用

node.js用到哪些技术

V8引擎,libuv,c/c++实现的c-ares、http-parser、OpenSSL、zlib等库

屏幕截图 2022-12-26 215807.png

什么是 bindings

屏幕截图 2022-12-26 220039.png

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 代码

Event Loop、计时器、nextTick - 掘金 (juejin.cn)