
一、node简介
这章主要介绍了node的历程,了解Node的发展历程及其带来的影响和价值。
本章中提到了「node起初」,是因为Ryan Dahl在最初的目标是单纯开发一个Web服务器的想法,称之为web.js.但随着时间的蜕变,变成了一个可以构建网络应用的基本框架,在它的基础上可以构建更多的应用,诸如服务器、客户端、命令行工具等,发展成为了一个强制不共享任何资源的单线程、单进程系统,包括十分适宜网络的库,可为构建大型分布式应用程序提供基础设施,其目标也变成了一个可提供构建快速、可伸缩的网络应用平台。它名字「node」所含的真正意义是每一个Node进程都可构成这个网络应用中的一个节点。
而选择 JavaScript 作为 Node 的实现语言主要因为:
* JavaScript 高性能(V8)
* 符合事件驱动
* 没有后端历史包袱。
node特点
(1) 异步 I/O操作:绝大多数的操作都是以异步的方式进行调用,包括文件操作及网络请求;
(2) 事件与回调函数:Node 可把前端浏览器中应用广泛的事件机制引入到后端,配合异步 I/O操作;优点是事件编程轻量,低耦合,只用关注事务点等,缺点是多个事件不是按出现顺序执行,不便于解读;
(3) 单线程:Node 保持了 JS 单线程的特点,在 Node 中,JS 与其余线程无法共享状态。单线程好处了不用处理多线程之间的状态同步与通信,没有死锁的存在,也没有线程切换带来的性能开销。缺点是无法利用 多核 CPU;错误会引起整个应用退出,应用健壮性值得考验;对大规模高 CPU 计算不友好;
(4) 跨平台;
在浏览器中,HTML5 制定了 Web Worker 标准来解决 JS 大规模计算导致的阻塞 UI 渲染的问题。而 Node 中,使用 child_process 创建子进程来应对单线程带来的问题。
二、模块机制
这一章主要介绍Node的模块机制,从中了解到Node如何实现CommonJS模块和包规范的。在这一章中,我们详细的解释了模块在引用过程中的编译、加载规则
具体的分析如图:

1、每个编译成功的模块都会将模块的路径作为缩影还存在Module._cache上,提高二次引入的性能;
2、在模块中,存在一个 module 对象,代表模块自身,而 exports 是 module 的属性;
3、内建模块的优势:本身由C/C++编写,性能由于脚本语言,而且在编译时,直接被编译成二进制文件,在node开始执行时,直接加载到内存中,省去标识符定位、文件定位、编译等过程,直接执行节省时间
三、异步I/O
异步 I/O 就是 I/O 的操作和执行调用过程中不阻塞后续程序执行,将原有等待 I/O 完成这段时间分配给其它需要的业务去执行,即并行执行;

四、异步编程

五、内存控制
