浏览器端JavaScript在Web应用中盛行,甚至让人们忘掉了JavaScript可以在服务器端运行这事。
Node的本意是提供一个高性能的面向网络的执行平台。
1.1 Node的诞生历程
2009年3月:Ryan Dahl在其博客上宣布准备基于V8创建一个轻量级的Web服务器并提供一个套库。
1.2 Node的命名与起源
http://nodejs.org
Ryan Dahl找到了设计高性能,Web服务器的几个要点:事件驱动、非阻塞I/O。大多数人不设计一种更简单和更有效率的程序的主要原因是他们用到了阻塞I/O的库。
Node发展为一个强制不共享任何资源的单线程、单进程系统,包含十分适宜网络的库,为构建大型分布式应用程序提供基础设施,其目标也是成为一个构建快速、可伸缩的网络应用平台。它自身非常简单,通过通信协议来组织许多Node,非常容易通过扩展来达成构建大型网络应用的目的。每个Node进程都构成这个网络应用中的一个节点,这是它名字所含意义的真谛。
1.4 Node的特点
依旧基于作用域和原形链,区别在于它将前端中广泛运用的思想迁移到了服务器端。
1、异步IO:绝大多数的操作都以异步的方式进行调用。可用从语言层面进行并行I/O操作
2、事件与回调函数:
3、单线程:没有死锁,也没有上下文交换所带来的性能开销。
弱点:无法利用多核CPU,错误会引起整个应用退出,大量计算占用CPU导致无法继续调用异步IO
解决办法:与Web Workers的思路相同,通过Master-Worker的管理方式。
4、跨平台:
1.5 Node的应用场景
IO密集型:利用Node的事件循环处理能力,而不是启动每个线程为每个请求服务,资源占用极少。
CPU密集型:虽然没有提供多线程用于计算支持,但还是有以下两个方式来充分利用CPU
- 通过编写C/C++扩展的方式
- 通过子进程,利用进程间的消息来传递结果,将计算与I/O分离,这样还能充分利用多CPU
与传统系统和平共处
分布式应用:
1.6 Node的使用者