按照: Node.js官方网站主页 的说法:前端
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.node
从这段介绍来看,解读要点以下npm
大多数人都认为 Node.js 只能写网站后台或者前端工具,这实际上是不全面的,Node.js的目标是让并发编程更简单,主要应用在以网络编程为主的 I/O 密集型应用。它是开源的,跨平台,而且高效(尤为是I/O处理),包括IBM、Microsoft、Yahoo、SAP、PayPal、沃尔玛及GoDaddy都是 Node.js 的用户。编程
下面是一张 Node.js 早期的架构图,来自 Node.js 之父 Ryan Dahl 的演讲稿,在今天依然不过期,它简要的介绍了 Node.js 是基于 Chrome V8引擎构建的,由事件循环(Event Loop)分发 I/O 任务,最终工做线程(Work Thread)将任务丢到线程池(Thread Pool)里去执行,而事件循环只要等待执行结果就能够了。浏览器
核心概念服务器
Chrome V8 是 Google 发布的开源 JavaScript 引擎,采用 C/C++ 编写,在 Google 的 Chrome 浏览器中被使用。网络
梳理一下多线程
核心架构
在解决并发问题上,异步是最好的解决方案,能够拿排队和叫号机来理解并发
Node.js 其实就是帮咱们构建相似的机制。咱们在写代码的时候,实际上就是取号的过程,由 Event Loop 来接受处理,而真正执行操做的是具体的线程池里的 I/O 任务。
之因此说 Node.js 是单线程,就是由于在接受任务的时候是单线程的,它无需进程/线程切换上下文的成本,很是高效,但它在执行具体任务的时候是多线程的。
Node.js 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”,毫无疑问,它确实作到了。这种作法将并发编程模型简化了,Event Loop和具体线程池等细节被 Node.js 封装了,继而将异步调用 Api 写法暴露给开发者。真是福祸相依,一方面简化了并发编程,另外一方面在写法上埋下了祸根,这种作法的好处是能让更多人垂手可得的写出高性能的程序!
在Node.js Bindings层作的事儿就是将 Chrome V8 等暴露的 C/C++ 接口转成JavaScript Api,而且结合这些 Api 编写了 Node.js 标准库,全部这些 Api 统称为 Node.js SDK,后面模块章节会有更详细的讨论。
微软在2016年宣布在MIT许可协议下开放 Chakra 引擎,并以 ChakraCore 为名在 Github 上开放了源代码,ChakraCore 是一个完整的 JavaScript 虚拟机,它拥有着和 Chakra 几乎相同的功能与特性。微软向 Node.js 主分支提交代码合并请求,让 Node.js 用上 ChakraCore引擎,即 nodejs/node-chakracore 项目。实际上微软是经过建立名为 V8 shim 的库的赋予了 ChakraCore 处理谷歌 Chrome V8 引擎指令的能力,其原理示意图以下
目前,Node.js 同时支持这2种 JavaScript 引擎,两者性能和特性上各有千秋,ChakraCore 在特性上感受更潮一些,曾经是第一个支持 Async函数 的引擎,但目前 Node.js 仍是以 Chrome V8 引擎为主, ChakraCore 版本须要单独安装,你们了解一下就好。
此为学习node的学习笔记,为了本身学习查阅,转自狼叔的教程,若是侵权请联系我删除
阅读原文
原文链接:https://cnodejs.org/topic/5ab3166be7b166bb7b9eccf7