1、由来
Ryan Dahl 最初的目标是写一个基于事件驱动、非阻塞IO的Web服务器,已达到更高的Web服务器性能。其实事件驱动和非阻塞IO是Web服务器性能提升的两个重要因素。
2、偶遇JavaScript
之所以选择JavaScript,是因为JavaScript
1)符合事件驱动
2)非阻塞IO还没有实现
3)V8引擎性能显著
4)JavaScript语言容易使用
3、为何叫Node
为什么叫Node,开始之初是一个Web服务器,后面变成了构建网络应用的一个基础框架,这样就可以在他的基础之上构建更多的东西,这些构建的节点就是所谓的Node,这些节点又是使用Node开发,通过通信协议连接在一起形成的可伸缩的网络应用系统。
4、Node的特点
1)异步IO
2)事件与回调函数
3)单线程,原因是因为JavaScript是单线程的,而且在Node,JavaScript与其他线程是无法共享状态的,单线程也有好处,不用担心数据共享造成的问题,不用担心死锁;同时,单线程也会带来问题,
A:无法利用多核CPU
B:错误会引起整个应用退出,应用的健壮性值得考虑
C:大量计算占用CPU导致无法继续调用异步的IO,这说明大计算处理不适合使用单线程
单线程的问题,首先这个问题是JavaScript自带的,那么JavaScript肯定也想出了解决的办法,那就是HTML5定制了 Web Work的标准,Web Work 能创建工作线程来进行计算,以解决JavaScript的大计算阻塞UI渲染的问题,工作线程为了不阻塞主线程,通过消息传递的方式来传递运行结果,这也使得工作线程不能访问到主线程的UI。Node采用了Web Work的思路,child_process ,子进程的出现,通过将计算分发到各个子进程,然后通过子进程之间的事件消息来传递结果。
4)跨平台,Node基于libuv实现跨平台,其实和Java虚拟机也没什么差异之处。
5、Node应用场景
1)IO密集型
2)作为中间传递应用程序,发挥其起步并行的优势