Node.js 是什么
-
是一个平台
1.他将多种技术组合在一起
2.让JavaScript也能调用系统接口、开发后端应用 -
Node.js 用到了那些技术
1.V8引擎
2.libuv
3.C/C++实现的 c-ares(解析dns)、http-parser(解析http)、OpenSSL(来做https)、zlib(来做加密)等库
技术架构
如果要看源码,推荐看0.10版本- 什么是bindings
1.js不能直接对系统进行操作
2.node.js 用 C++ 进行封装,封装的文件叫做 xxx_bindings.cpp
3.在用node.js提供的编译工具将其编译成 .node 文件
4.这样js就能直接 require 这个文件,
5.中间的桥梁就叫做binding,因为很多桥梁,所以就叫bindings
JS 调用C++代码 http://nodejs.cn/api/addons.html#addons_function_arguments
C++ 调用JS 回调 http://nodejs.cn/api/addons.html#addons_callbacks
Node.js 的工作流程
libuv 是什么
- 背景
1.FreeBSD系统上面有kqueue
2.Linux系统上有epoll
3.windows系统上有IOCP
4.于是Ryan 就写了一个跨平台的异步 I/O库--libuv
5.libuv会根据系统自动选择合适的方案 - 功能
可以用于 TCP/UDP/DNS/文件等的异步操作
V8
- 功能
- 将 JS 源代码变成本地代码并执行
- 维护调用栈,确保 JS 函数的执行顺序
- 内存管理,为所有对象分配内存
- 垃圾回收,重复利用无用的内存
- 实现 JS 的标准库
- 注意
- V8 不提供DOM API
- V8 执行 JS 是单线程的
- 可以开启两个线程分别执行 JS
- V8 本身是包含多个线程的,如垃圾回收为单独线程
- 自带 event loop 但 Node.js 基于 libuv自己做了一个
网友评论