node.js理论知识梳理
之前一直看视频网站的视频课程学习node.js.讲解的还不是特别细致。so买了本《深入浅出nodejs》。下面总结下读出笔记。
第一章、node简介
1.node诞生历程
创始人Ryan Dahl 2009年5月在GitHub发布,随后2012年移交Isaac Z.Schlueter.
2.node给JavaScript的意义
node的结构和chrome十分相似,都是基于事件驱动的异步架构,浏览器通过事件驱动来服务页面上的交互,Node通过事件驱动来服务I/O.
node打破了过去js只能在浏览器中运行的局面。前后端编程环境统一,可以大大降低前后端转换所需要的上下文交换代价。
3.node的特点
1> 异步I/O
对比同步I/O,大大提升效率。
2> 事件和回调函数
事件编程方式具有轻量级、松耦合、只关注事务点等优势;回调函数是最好接受异步调用返回数据的方式。
3> 单线程
node中,js与其余线程是无法共享任何状态的。单线程的最大好处是不用像多线程编程那样处处在意状态的同步问题,这里没有死锁的存在,也没有线程上下文交换所带来的性能上的开销。
单线程的缺点:无法利用多核CPU、错误会引起整个应用退出,应用的健壮性值得考验、大量计算占用cpu导致无法继续调用异步I/O
4>跨平台
4.node的应用场景
1> I/O密集型
优势是node利用事件循环的处理能力,而不是启动每一个线程为每一个请求服务,资源占用极少。
2> cpu密集型业务
node可以通过编写c/c++拓展的方式更高效的利用cpu,将一些v8不能做到的性能极致的地方通过c/c++来实现。
cpu密集不可怕,如何合理调度是诀窍。
3> 与遗留系统和平共处
旧的系统具有非常稳定的数据输出,持续为传统网站服务,同时为移动版提供数据源,node将该数据源当做数据接口,发挥异步并行的优势,而不用关心它背后是什么语言。
4>分布式应用
5. node的使用者
1>前后端编程语言环境统一
2>node带来的高性能I/O用于实时应用
3>并行I/O使的使用者可以更高效的利用分布式环境
4>并行I/O,有效利用稳定接口提升web渲染能力。
5>云计算平台提供node支持。
6>游戏开发领域。
7>工具类应用。