Node.js简介与架构
Node.js 是什么?
node.js是一个javascript运行时环境,javascript的运行平台。
那么问题来了,为什么node.js可以运行javascript呢?
node.js内置了v8,V8是google开源的JavaScript引擎,用于将JavaScript代码转换成机器码,然后执行。v8是以C++语言开发的。
node.js=V8+内置基本模块(大多用JavaScript编写),类似JRE=JVM+java标准.
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。Node.js架构
要想深入理解 Node.js,我们需要把 Node.js 进行必要的拆解,了解每个组成部分的作用,它们之间如何交互,最终构成 Node.js 这个强大的运行时环境。

上图是 Node.js的内部结构图。我们可以看到,自底向上主要可以分成三层:最底层是 Node.js 依赖的各种库,有 V8、libuv 等;中间层是各种 Binding,也就是胶水代码;最上层是应用代码,可使用 Node.js的各种 API。
·v8
Google开源的高性能JavaScript引擎,它将JavaScript代码转换成机器码,然后执行,因此速度非常快。V8以 C++语言开发,Google 的Chrome 浏览器正是使用的 V8引擎。
·libuv
libuv 以C语言开发,内部管理着一个线程池。在此基础之上,提供事件循环(Event Loop)、异步网络I/O、文件系统 I/O等能力。
·其他底层依赖库
如 c-ares、crypto (OpenSSL)、http-parser 以及zlib。这些依赖提供了对系统底层功能的访问,包括网络、压缩、加密等。
********
Node.js 底层的依赖库,有的以C 语言开发,有的以 C++ 语言开发,如何让应用代码(JavaScript)能够与这些底层库相互调用呢?这就需要中间层的 Binding 来完成。Binding 是一些胶水代码,能够把不同语言绑定在一起使其能够互相沟通。在 Node.js 中,binding 所做的就是把 Node.js 那些用 C/C++写的库接口暴露给 JS环境。
中间层中,除了 Binding,还有 Addon。Binding 仅桥接Node.js 核心库的一些依赖,如果你想在应用程序中包含其他第三方或者你自己的 C/C++ 库的话,需要自己完成这部分胶水代码。你写的这部分胶水代码就称为 Addon。本质上都是完成桥接的作用,使得应用与底层库能够互通有无。这么做的目的之一是代码重用:这些功能已经有现存的成熟实现,没必要只是因为换个语言环境就重写一遍,如果桥接调用一下就足够的话。另一个原因是性能:C/C++这样的系统编程语言通常都比其他高阶语言(Python、JavaScript、Ruby 等等)性能更高,所以把主要消耗 CPU的操作以 C/C++ 代码来执行更加明智。
什么是胶水代码???请点这里

